apify/crawlee · error · Error

The state object is not consistent with RequestList, too…

Error message

The state object is not consistent with RequestList, too few requests loaded.

What it means

Beyond being well-formed, the restored nextIndex must not exceed the number of loaded requests — otherwise the list cannot resume where it left off. This error means the persisted state references more requests than the current sources produced (state.nextIndex > this.requests.length).

Solutions

  1. Align sources so the list contains at least nextIndex requests (restore the removed URLs)
  2. Delete the persisted state record to start fresh, or use a new persistStateKey for the changed list
  3. Verify sourcesFunction returns the same/complete set of URLs as the run that persisted the state

Example fix

// before
// state { nextIndex: 500 } but sources now produce 300 requests
// after
const store = await KeyValueStore.open();
await store.setValue('CRAWLEE_list-state', null); // reset state to match the new sources
// or restore the full sources array so length >= nextIndex
Defensive patterns

Strategy: try-catch

Validate before calling

const stored = await store.getValue('CRAWLEE_list-state');
if (stored && typeof stored.nextIndex === 'number' && sources && stored.nextIndex > sources.length) {
  await store.setValue('CRAWLEE_list-state', null); // state belongs to a larger source set — reset
}

Try / catch

try {
  const list = await RequestList.open('list', { sources, persistStateKey: 'state' });
} catch (e) {
  if (e.message.includes('too few requests loaded')) {
    const store = await KeyValueStore.open();
    await store.setValue('CRAWLEE_state', null);
    return RequestList.open('list', { sources, persistStateKey: 'state' });
  }
  throw e;
}

Prevention

When it happens

Trigger: Re-running with fewer/smaller sources than the previous run (sources array trimmed, sourcesFunction returning fewer URLs), while a state persisted from the larger run is restored; switching persistStateKey between lists so state belongs to a different request set.

Common situations: Editing the sources list between deployments without clearing persisted state; a dynamic sourcesFunction returning fewer items due to an upstream API change; reusing the same persistStateKey for a different RequestList.

Related errors


AI-assisted analysis of apify/crawlee@dbe57fb09c (2026-08-30). Data as JSON: /api/errors/f8c3581875053777. Report an issue: GitHub.

Appendix: source

Thrown at packages/core/src/storages/request_list.ts:507

    private async persistRequests(): Promise<void> {
        const serializedRequests = await serializeArray(this.requests);
        this.#store ??= await KeyValueStore.open();
        await this.#store.setValue(this.#persistRequestsKey!, serializedRequests, { contentType: CONTENT_TYPE_BINARY });
        this.areRequestsPersisted = true;
    }

    /**
     * Restores RequestList state from a state object.
     */
    private restoreState(state?: RequestListState): void {
        // If there's no state it means we've not persisted any (yet).
        if (!state) return;
        // Restore previous state.
        if (typeof state.nextIndex !== 'number' || state.nextIndex < 0) {
            throw new Error('The state object is invalid: nextIndex must be a non-negative number.');
        }
        if (state.nextIndex > this.requests.length) {
            throw new Error('The state object is not consistent with RequestList, too few requests loaded.');
        }
        if (
            state.nextIndex < this.requests.length &&
            this.requests[state.nextIndex].uniqueKey !== state.nextUniqueKey
        ) {
            throw new Error(
                'The state object is not consistent with RequestList the order of URLs seems to have changed.',
            );
        }

        const deleteFromInProgress: string[] = [];
        state.inProgress.forEach((uniqueKey) => {
            const index = this.#uniqueKeyToIndex[uniqueKey];
            if (typeof index !== 'number') {
                throw new Error(
                    'The state object is not consistent with RequestList. Unknown uniqueKey is present in the state.',
                );
            }

View on GitHub (pinned to dbe57fb09c)