Run a Collection
Once a collection has items in it, you can trigger a run at any time — manually from the dashboard or on a schedule. This guide walks through both approaches and shows you how to poll for results via the API.
In the dashboard
- Open Collections from the sidebar and click the collection you want to run.
- Click Run Now in the collection detail view.
- The collection status changes to Processing. Processing collections are always sorted to the top of the list so they are easy to track.
- When the run completes the status returns to its normal state and a new entry appears under Run History with download links for the result files.
Credit gate — check your balance first
A run only proceeds if your remaining credits are at least equal to the number of items in the collection. If you do not have enough credits, the run is rejected immediately — nothing is queued and no credits are deducted. Check your credit balance at any time under Account or via POST /users/credits/. To add credits, upgrade your plan on the Billing page.
Manual vs scheduled runs
| Run type | How it triggers | When to use |
|---|---|---|
| Manual | You click Run Now (dashboard) or call POST /schedules/run/result/ | Ad-hoc checks, testing, one-off refreshes |
| Scheduled | Automatically fires on the collection's cadence (Daily, Weekly, Monthly, Every X Minutes) | Ongoing monitoring, automated pipelines |
Both run types go through the same credit gate and produce results in the same format. The only difference is who initiates the enqueue.
Via the API
Step 1 — trigger the run
Run Collection
https://multicartapi.com/api/v1/schedules/run/result/| Parameter | Type | Required | Description |
|---|---|---|---|
collection_id | integer | Required | ID of the collection to run. All items in the collection are enqueued immediately. |
curl https://multicartapi.com/api/v1/schedules/run/result/ \
-X POST \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "collection_id": 101 }'{
"code": 200,
"data": "Scraping Processing Queued!",
"status": 1
}If the run is rejected due to insufficient credits the envelope returns code: 402 and status: 0 — the HTTP transport is still 200. Check body.code and body.status to detect this case:
{
"code": 402,
"data": "Not enough credits — ...",
"status": 0
}The endpoint returns immediately. Scraping happens asynchronously in the background. Proceed to step 2 to poll for completion.
Step 2 — poll for results
List Run Results
https://multicartapi.com/api/v1/schedules/collections/results/download/| Parameter | Type | Required | Description |
|---|---|---|---|
collection_id | integer | Required | Collection ID to retrieve run history for. |
skip | integer | Optional | Pagination offset (number of runner rows to skip). |
limit | integer | Optional | Page size (number of runner rows to return). |
curl https://multicartapi.com/api/v1/schedules/collections/results/download/ \
-X POST \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "collection_id": 101, "skip": 0, "limit": 5 }'{
"code": 200,
"data": [
{
"id": 88,
"collection": 101,
"is_download_generated": true,
"download_links": {
"pages": [
"https://multicartapi.com/api/v1/results/101/88/AU Laptops_88_Results_Page_1.json"
],
"all_pages": "https://multicartapi.com/api/v1/results/101/88/AU Laptops_88_Results_All_Pages.zip"
},
"total_exacted_result": 250,
"total_results": 250,
"created_at": "2026-06-20T12:00:00Z",
"updated_at": "2026-06-20T12:05:00Z"
}
],
"status": 1
}Poll this endpoint until is_download_generated is true on the most recent runner entry (the first element in the array). A reasonable poll interval is every 10–30 seconds depending on collection size. Once is_download_generated is true, use the URLs in download_links.pages to fetch individual result JSON files, or download_links.all_pages to download a ZIP of all pages in one request.
Response is paginated by runner
Each element in data represents one run (identified by its id, called a runner ID). The most recent run is first. Use skip and limit to page through older runs. For most polling workflows, limit: 1 is sufficient.
