Instagram Post Scraper
Pricing
from $1.49 / 1,000 results
The post page cost roughly 128 KB per result, and videos cost a second request on top of it for the view count. The embed page carries the same counts — verified identical to the digit, fetched from both surfaces at the same moment — in 54-65 KB, with the view count already included. One request per post instead of two, at under half the bytes.
Present in every record, empty, so existing integrations keep parsing:
| Field | Now |
|---|---|
timestamp | null |
videoUrl | "" |
originalWidth, originalHeight | null |
firstComment, latestComments | "", [] |
ownerFullName | "" |
alt | "" |
isCommentsDisabled | false (a default, not a reading) |
Everything else is unchanged, including likesCount, commentsCount,
videoViewCount, caption, hashtags, mentions, displayUrl,
dimensionsWidth/Height, videoDuration, productType, musicInfo,
ownerUsername and ownerId.
not-found. The embed answers HTTP
200 for one rather than 404, so this is now decided by the payload rather
than the status code — keying on status would have called every deleted
post a success.First release.
/<username>/p/<code>/ and
/<username>/reel/<code>/) and share links carrying ?igsh=, ?igsi=
or ?stkn= tracking parameters. Duplicates are charged once.null rather than 0.videoViewCount for videos, read from the post's public embed
page. Views are not plays, so videoPlayCount stays null rather than
being filled with a different metric.musicInfo reports uses_original_audio: null when Instagram publishes
no track metadata, instead of inferring a value that could be wrong.not-found, invalid-url, unsupported-page, blocked or network.
An error record is billed the same as a delivered one, because the request
was made and the bandwidth spent. Retries and duplicates are not charged
on top, and a charge never happens without its record.