Instagram Scraper - Profiles, Posts & Reels, $0.45/1k
Pricing
Pay per event
Instagram Scraper - Profiles, Posts & Reels, $0.45/1k
Instagram's own profile endpoint errors out on accounts with a business category, so this reads whichever route answers: that lookup, the rendered page, or the account's post feed. Usernames return profile plus recent posts; URLs return one post or reel. $0.45 per 1,000 items.
Pricing
Pay per event
Rating
5.0
(1)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
39
Total users
13
Monthly active users
2 days ago
Last modified
Categories
Share
Instagram Scraper — profiles, posts and reels
Instagram hands a signed-out visitor its data through the endpoints its own site calls, and those endpoints move. The profile lookup currently errors out on any account with a business category set — most brands, most creators. So this reads whichever route is answering: the site's own lookup when it works, the rendered page and the account's post feed when it doesn't. A username gets you the profile row plus that account's recent posts, a post or reel URL gets you that single item. Everything comes back flat, one JSON row per thing, ready for a spreadsheet or a database.
No login, no cookie, no API key, no app review. Instagram serves profiles and public posts to a signed-out client and that's the route this uses.
What you get
Profile row (type: "profile"):
{"ok": true,"type": "profile","username": "nasa","id": "528817151","fullName": "NASA","biography": "Making the seemingly impossible, possible. ✨","externalUrl": "https://www.nasa.gov/","followersCount": 104400555,"followsCount": 92,"postsCount": 4887,"verified": true,"isBusinessAccount": true,"private": false,"profilePicUrl": "https://scontent-fra3-2.cdninstagram.com/...","url": "https://www.instagram.com/nasa/"}
Post and reel rows (type: "image", "video" or "carousel") carry: shortCode, url,
caption, hashtags[], mentions[], likesCount, commentsCount, videoViewCount,
displayUrl, videoUrl, images[], isVideo, dimensions, ownerUsername, ownerId,
timestamp (ISO 8601) and accessibilityCaption.
hashtags and mentions are parsed out of the caption for you, so you don't have to regex them
yourself downstream.
Input
{"usernames": ["nasa"],"resultsLimit": 50}
| Field | Default | Notes |
|---|---|---|
usernames | — | Handles with or without @. Each one returns its profile row plus its posts. The most reliable mode. |
startUrls | — | Profile URLs scrape that account's posts; /p/, /reel/ and /tv/ URLs scrape that one item. |
resultsLimit | 50 | Total items across the whole run — profiles and posts together, both count. Capped at 5,000. This is your spend cap. |
onlyPostsNewerThan | — | YYYY-MM-DD. Older posts are dropped and not charged. |
sessionCookies | — | Optional and normally not needed. Everything above works without an account. A cookie is only attached if the signed-out route is refused. Stored as a secret. |
proxyConfiguration | Apify datacenter | Leave it. Instagram rate-limits per address, and rotating datacenter proxies are exactly what that needs. They're included in the run cost and add nothing to your bill. Set it only to use proxy servers you already pay for. |
notionConnector / notionParentId | — | Optional: write each row into a Notion database as well as the dataset. |
Run it with no input at all and you get one labelled _sample row showing the output shape,
charged nothing.
Limits
- Private accounts return the profile shell only. Follower counts, bio and
private: truecome through; the posts don't, because there's nothing public to read. - Recent posts, not the full archive. Timeline paging stops at 60 pages, so very large accounts
won't come back complete in one run. Use
onlyPostsNewerThanto make the walk purposeful. postsCountcomes backnullon the fallback route. When the site's own profile lookup errors out, the rendered page it falls back to carries the follower and following counts but not the account's total post count. Everything else in the profile row is there.- No comments, no follower lists, no stories. Those are separate scrapers.
- Media URLs expire. Instagram signs its CDN links with a short lifetime. Fetch the file while the run is going if you need to keep it; a URL you save today will 403 on you later.
- Items are deduplicated within a run, so nothing is returned or charged twice.
Billing
$0.00045 per item ($0.45 per 1,000), plus $0.001 when a run starts. Flat rate on every Apify plan. No volume tiers to climb, no minimum spend.
A profile row and a post row cost the same. You're charged only for rows that carry data — sample rows, diagnostic rows, date-filtered posts, duplicates and empty results are free. The start fee goes by run memory, one event per gigabyte, so it's $0.001 at the default 1 GB.
