Home › Guides › Instagram Profile Posts Scraper
Instagram post history by profile: photos, carousels and reels as clean rows
The Instagram Profile Posts Scraper returns a profile's posts — photos, carousels and reels — one row per post, from the top of each list down until the list ends or your limit is reached. A row carries the caption with hashtags and mentions, the kind, the image address, author and two approximate times. Turn on Read each post's details and one more request per post adds likes and comments, exact time, location, co-authors, tagged accounts, carousel items and topics — and, for a video, its length, file address and sound. No login, no cookies, no account.
Who it's for
- Content and competitor analysts studying a profile's formats, captions and (with details) engagement.
- Brand-partnership trackers mapping who a brand co-authors and tags, carousel item by item.
- Social teams watching accounts for new posts with an only-new feed.
- Datasets and LLMs fed a profile's post history with stable fields.
What you get
| Group | Fields |
|---|---|
| From the list | Type (photo/carousel/reel), post ID & short code, URL, owner, caption, hashtags, mentions, accessibility caption, image URL, carousel count, approximate times, position |
| With details | Exact time, like count (+ hidden flag), comment count (+ disabled flag), location, co-authors, tagged users, carousel media, topics, size; for video: duration, video URL, music |
A real detailed row (trimmed):
{
"type": "photo",
"url": "https://www.instagram.com/p/DeMw7vrDPS3/",
"profile": "nasa",
"caption": "Moon-like Madagascar … #NASA #Earth #Geology",
"hashtags": ["NASA", "Earth", "Geology"],
"takenAtApprox": "2026-10-07T16:15:00.015Z",
"takenAt": "2026-10-07T16:15:06.000Z",
"likeCount": 84901, "likesHidden": false,
"commentCount": 249,
"topics": ["satellite view", "geology", "earth from space"],
"detailsSource": "post-query",
"positionInProfile": 9
}
Input
| Input | What it does |
|---|---|
profiles | One per line: natgeo, @natgeo or a URL (up to 10,000; duplicates read once) |
maxPostsPerProfile · maxPosts | Posts per profile from the top of its list (default 100) · total rows |
postTypes | photo, carousel, video (covers reels); other kinds skipped, not charged |
includeDetails | Read each post's own record for engagement, exact time and more (default off) |
onlyNewPosts · listName | Deliver only posts not delivered before — account watching on a schedule |
{ "profiles": ["nasa"], "maxPostsPerProfile": 12, "includeDetails": true }
Honest limits
- No view/play counts — the public post record carries none; no comment texts, stories, highlights, follower lists or search; no file downloads.
- Approximate times aren't sort keys.
takenAtApproxis read from the post id (within a minute for 64 of 120 posts, over an hour early for 16); usetakenAt(details) for order, and allow a day onpublishedDayApproxwhen filtering. - A hidden like count is
null; a disabled-comments post can state a higher count than the comments shown. Media is not downloaded —displayUrl/videoUrlare temporary addresses. - Private / signed-in-only / age-restricted profiles get a free status row; a changed Instagram page ends the run with a message, not empty rows.
Pricing
Pay per result: a post event (from the list) or post-detailed (details read). A post asked with details that came without them carries post. Status rows, posts of a kind you did not ask for, and posts skipped as already delivered are free. Current prices are on the actor's Pricing tab on Apify.
Pull a profile's whole feed: photos, carousels and reels with captions and, on demand, engagement and exact times. Exportable to JSON, CSV or Excel.
Open the Instagram Profile Posts Scraper →Related
This Actor reads a profile's feed; for profile-level metrics (followers, engagement rate) use the Instagram Profile Scraper, for one post by URL the Instagram Post & Reel Details Scraper, for reels with a score the Instagram Reels Scraper, and for comments the Instagram Comments Scraper.
Frequently asked questions
Do I need an Instagram login or cookies?
No — only what a signed-out visitor sees. No login, no cookies, nothing from your own account.
Why are there no like or comment counts on some rows?
The profile's list carries none; they come with includeDetails, which reads each post's own record (one more request per post). A hidden like count stays null, never a fake 0.
Are the times exact?
takenAtApprox and publishedDayApprox are approximate — read from the post id, within a minute of the exact time for 64 of 120 posts but over an hour early for 16. Use takenAt (with details) for the exact order; allow a day when filtering on publishedDayApprox.
Does it get reels?
Yes, as video or reel rows. For reels-only with a performance score against the profile's median, use the Instagram Reels Scraper.
Can I watch a profile for new posts?
Yes — turn on onlyNewPosts with a listName and schedule the run; each run delivers only posts not delivered before. postId is the key, delivered once per run.
Using the data lawfully
Posts are published by the accounts themselves, but rows can hold personal data of others (co-authors, tagged accounts, mentions, locations); you decide why you use it and are responsible for a lawful reason (GDPR and similar). Media belongs to its owners and its addresses are temporary. Not affiliated with Instagram or Meta.
Instagram Profile Posts Scraper — a profile's post history, with engagement on demand. Pay per row, no API key.
Get Instagram posts on Apify →