Instagram Profile Download API
Export a public Instagram profile as a ZIP file with photos, reels, videos, captions, post metadata,
manifest.json, and posts.csv. Authenticated runs are recommended in async mode and
pricing depends on your account. Standard pricing is 80 credits for up to 1,000 posts, plus 10 credits for each additional started 1,000 posts. Grandfathered accounts retain 40 credits plus 5 per additional 1,000 posts. Before the new pricing launches, all accounts retain the original rates.
POST
/v1/instagram/profile-download
Canonical execution route: /v1/tasks/instagram-profile-download/runs. For the live task contract,
inspect GET /v1/tasks/instagram-profile-download.
Execution notes
- Use authenticated API access for full-profile exports.
- Async execution is recommended for large profiles.
- The task catalogue shows your account’s starting price. The final charge depends on the posts included in the ZIP.
- Set
maxPoststo cap the export; omit it to attempt the full public profile. - Marketing-site free exports are capped separately to the first 20 posts and do not use this API route.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| profile | string | Yes | Instagram username, @handle, or full profile URL. |
| maxPosts | number | No | Maximum number of posts to include. Omit to attempt the full public profile. |
| _run.async | boolean | No | Set to true to return immediately with a run envelope and poll later. |
Response
{
"run_id": "00000000-0000-4000-8000-000000000001",
"task_key": "instagram-profile-download",
"task_name": "Instagram Profile Download",
"run_status": "succeeded",
"status_url": "/v1/runs/00000000-0000-4000-8000-000000000001",
"result": {
"success": true,
"export_id": "054b71a5-9971-49ee-9470-2fe863901a44",
"status": "completed",
"file_name": "natgeo.zip",
"download_url": "https://...",
"download_url_expires_at": "2026-04-05T11:55:00.000Z",
"expires_at": "2026-04-05T11:55:00.000Z",
"truncated": false,
"profile": {
"id": "787132",
"username": "natgeo",
"full_name": "National Geographic",
"is_private": false,
"total_posts": 1000,
"profile_pic_url": "https://..."
},
"result_summary": {
"postsDiscovered": 84,
"mediaDiscovered": 120,
"estimatedBytes": 456789123,
"downloadedFiles": 120,
"failedFiles": 0,
"skippedFiles": 0,
"truncated": false
}
},
"error": null
}Result Fields
download_url - Temporary signed ZIP URL.download_url_expires_at - Expiry for the signed download URL.expires_at - Export artifact retention expiry.truncated - Whether the final ZIP is partial.result_summary - Counts for posts, media, downloads, skips, and estimated bytes.Code Examples
curl -X POST "https://api-ingress-worker-staging.browsable-staging.workers.dev/v1/instagram/profile-download" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"profile":"natgeo","maxPosts":1000,"_run":{"async":true}}'Try it Out
API Playground
Error Codes
400 Bad Request
The JSON body does not match the task input schema.
401 Unauthorized
Missing or invalid API key.
403 Forbidden
Your account cannot execute the task, usually because of access or credits.
429 / upstream throttling
Instagram may temporarily limit full-profile exports. Poll the run and inspect the final error or partial ZIP result.