-
Recover explicitly invalid/expired cursors and cursor cycles by rewinding the profile, retaining delivered and confirmed IDs, and charging only newly discovered results.
-
Persist rewind state before renewed requests, cap failed cursor restarts at two per profile, and report restart/recovery/replay counters.
-
Validate deep cursor rejection after 7,248 rows, concurrent limits, six-tier billing, cancellation, source reordering, and real local SDK/Docker replay without network access.
-
Refresh public query/profile pagination identifiers once after an unrestricted GraphQL error; retry the same cursor only when the request identifiers changed.
-
Retain discovered query IDs during transport renewal and temporary script failures; add offline tests for changed, missing and still-invalid identifiers and terminal restrictions.
-
Respect Apify's three-minute charge-key lifetime with timestamped, run-scoped outboxes and bounded replay; block ambiguous legacy/expired pending charges for manual reconciliation.
-
Prevent repeat charges for already confirmed IDs before trimming batches to the spending limit; signal the exact budget boundary immediately.
-
Validate official charge-client payloads locally for all six server-resolved tier prices, including lost-response and expired-key simulations.
-
Persist profile pagination identity with the cursor so continuation can recover even when fresh HTML omits it.
-
Simulate 10,000-row pagination through the production client, inject failures at row 7,248, and verify recovery and subsequent continuation without live requests.
-
Retry transient idempotent checkpoint and billing-outbox writes, including lost acknowledgements.
-
Resume partially delivered billing batches by delivering only missing rows and charging once with the original idempotency key.
-
Detect cursor cycles, preserve the last valid cursor, and reject malformed pagination and Reel edges.
-
Reject corrupt billing records and normalize non-finite numeric fields to valid JSON.
-
Classify proxy authentication failures as configuration errors without repeated requests.
-
Add seeded fault-injection, concurrent spending-limit, 100,000-ID ledger, and isolated Docker resource tests.
-
Recover temporary page failures with fresh residential sessions and progressive waits, retaining the committed cursor and profile identity.
-
Complete delivered partial collections with an explicit warning; retain incomplete profile state for continuation.
-
Report collection completeness and recovery counters separately from terminal run success.
-
Avoid counting historical tiered charges twice in the spending guard on continuation.
-
Honor reduced cursor-page sizes and keep country targeting first in DataImpulse parameters.
-
Validate the current proxy-backed runtime in local Docker with real public profiles, adaptive concurrency from 1 to 3, and long runs up to 300 requested Reels; terminal access redirects remain fail-closed.
-
Use curl_cffi with Chrome TLS impersonation and identity encoding for production Instagram requests; keep the injected httpx transport for deterministic tests.
-
Align profile pagination with Instagram's current /api/graphql Relay contract: use the initial query for page one and the dedicated _connection operation, graph ID, and node response root for cursor pages.
-
Replace Instagram's login-gated anonymous REST feed with the current public profile GraphQL surface, including current JavaScript operation discovery and a verified fallback query ID.
-
Distinguish authentication/access denials from temporary rate limits; do not retry denied requests or change sessions to retry a rate limit.
-
Respect Retry-After and recognize authentication/verification errors returned with HTTP 200.
-
Preserve delivered Reels and billing evidence when a source collection is incomplete.
-
Report profile-processing errors separately from output transactions and allow failed profiles to resume without duplicate results.
-
Add regression tests for GraphQL pagination, operation discovery, partial collection, resumption, bulk failures, and cancellation.
-
Add throttled customer-facing live progress to the Apify Console and run log, with collection phases, profile counts, page counts, Reel totals, and terminal state.
-
Keep proxy, billing, transport, retry, and upstream diagnostics out of user-visible progress messages.