Extract public VK and VKVideo video metadata from channels, searches, Clips, playlists or URLs. Export titles, views, owners and source media references to CSV, Excel or JSON. No VK login required; access and media limits apply.
Public direct-video and clip metadata is fetched lazily in batches of at most 50 IDs; every output row is still matched to its requested ID. Missing media references or covers trigger a single public detail lookup so throughput is not improved by stripping fields. Item-specific batch errors are isolated without amplifying global transport failures.
Eligible paid keyword-only runs overlap up to three inputs' HTTP waits with bounded queues, a shared pacing gate, and backpressure before pagination. Data/asset writes and first-source attribution stay in original input order; duplicate candidates never consume a later input's new-row quota. No prefetch beyond the first input starts before a confirmed save; charge limits, uncertain writes and deadlines stop and drain every producer. Free-plan, mixed, asset-download, unlimited and >1,000-target inputs retain sequential execution. Candidate credits prevent requests beyond a fulfilled target while still replenishing cross-input duplicates.
Anonymous-token requests are single-flight. Owner metadata is reused within a run; sparse updates do not erase known values.
A shared pacing/cooldown gate honors HTTP Retry-After. Transport and VK business errors share one bounded retry budget. Explicit maxRequestRetries: 0 is respected; public-access denials are not retried as network failures.
HTTP timeouts cover full response bodies. An Actor deadline cancels upstream work while reserving time to save confirmed results and a truthful summary.
Paginated sources save their first page immediately, then flush bounded batches of up to 50 rows and drain pending rows on source completion/error. Already-exported videos do not consume a later input's new-result quota. Both section cursors and typed video-block cursors are retained, using the matching public API method. Cycle detection includes the method, resource ID and cursor.
When the original search is exhausted or repeatedly yields few new identities, advertised and enabled native video orderings (recent, then longest if still short) may supplement the identical keyword, each at most once. The response must confirm both selectors, and the chosen selectors are retained on continuations. Original head rows and queued cursors are retained, no keyword/access filter is broadened, and the alternate first page and all its continuations share the original total page budget. Supplemental rows need not preserve a single relevance ranking; attempted/confirmed sort IDs are explicit in RUN_SUMMARY.
A mixed search can return an album-only terminal section even while video continuations remain available. Exposed video blocks are followed independently; if such an ambiguous end still underfills the target, the exact same search can be refreshed once within the unchanged total page limit. Keywords and public-access filters are not broadened.
A stale video-block reference (VK 104) can use its actual public parent and the supplied cursor once, only if that route returns valid public video data and the page budget permits it. If needed, the exact original search can be reloaded once within the same page budget; the stale error is cleared only after valid public continuation data or fulfillment of the original result target. Access denials never trigger alternate routing, and an original-input 104 is not treated as stale pagination. Recovered cursors remain counted in the summary.
VK's public clip-feed client uses 104 as an empty continuation. After any available public-parent check, this is recognized only for a block proven to contain public clips exclusively, with exhaustedClipBranches and API-error telemetry retained. Original-input 104, mixed/ordinary video blocks, transport failures and access denials retain their error semantics.
An unrecovered pagination failure preserves saved records but remains an input failure, including under strict mode. Valid empty public responses remain successful empty responses.
Free-plan policy is unchanged: only the first 50 normalized seeds are eligible and at most 50 dataset rows are saved globally. Eligibility/policy skips are now explicit in the summary. Paid plans retain their existing result/page limits.
Pay-per-event limits count confirmed stored rows only. Dataset writes and charges are not blindly retried. Only explicit safe platform GET/HEAD reads receive bounded transient retries.
Optional downloads over 8 MiB spill to disk and stream into the cloud Key-Value Store, preserving the configured file-size limit without buffering two full files per worker. Interrupted downloads leave metadata intact and do not claim a stored file.
Already-exported direct IDs are reported as covered, not unavailable. Duplicate-only inputs and genuinely empty public responses have separate counters. A zero-charge direct response does not falsely fulfill its output target.
RUN_SUMMARY adds first-save latency, per-input stop reasons and target fulfillment, deadline/charge-limit signals, direct-batch counts, and request metrics. Existing dataset field names and pricing are unchanged.
SUCCEEDED does not mean an arbitrary source contains the requested number of public videos. Check targetMet, inputOutcomes, and download counters. Private/restricted content, permanent source errors, configured page/charge limits, and legitimate feed exhaustion remain distinct.
The Docker build runs the complete offline regression suite before producing a runnable image. Real-run measurements and release receipts are delivered separately; this changelog makes no blanket 100% availability claim.