Instagram Scraper - Profiles, Posts & Reels with Date Filters avatar

Instagram Scraper - Profiles, Posts & Reels with Date Filters

Pricing

from $2.00 / 1,000 results

Go to Apify Store
Instagram Scraper - Profiles, Posts & Reels with Date Filters

Instagram Scraper - Profiles, Posts & Reels with Date Filters

Extract public Instagram profiles, posts and reels with full source captions, dates and engagement fields. Bound timeline pagination and filter by UTC dates.

Pricing

from $2.00 / 1,000 results

Rating

0.0

(0)

Developer

Ben

Ben

Maintained by Community

Actor stats

0

Bookmarked

148

Total users

3

Monthly active users

2.6 hours

Issues response

8 hours ago

Last modified

Share

Instagram Scraper: Public Profiles, Posts and Reels

Read public Instagram profiles and timelines with source captions, timestamps and engagement fields. Filter posts by inclusive UTC dates and inspect how far the run paginated. Export to JSON, CSV or Excel, run on an Apify schedule, call via API, or connect to Make, Zapier or n8n.

Quick start

Start with a tested example for dated public NASA posts:

Open the example and choose Try for free to copy its input into your account. Check the input and set a maximum run charge before starting; Actor fees still follow the pricing below. When the run finishes, open the run's dataset and select the Overview view and download JSON for nested fields or CSV/Excel for a table.

Your goalInput to use
Inspect an accountmode: profile and its public username
Collect public posts in a date windowmode: posts, UTC dates and page/result caps

The real output example shows the record shape. The Python workflow saves your own export to a local JSON file with a $0.05 maximum Actor charge.

What it extracts

The public HTTP route supports profile, posts and reels. It reads Instagram's public web data without requiring a login cookie. A profile result must match the requested username and contain useful public information before the Actor accepts it. Posts retain their stable shortcode and complete source caption rather than truncating the caption at 2,000 characters.

Profiles can contain the displayed name, biography, website, follower/following counts, post count, verification status, profile image and public business contact fields. Optional contact extraction uses published profile data and bio text; it does not verify email deliverability or uncover private contacts.

Post and reel rows contain caption, like/comment counts, source timestamp, shortcode, post URL, image/video URLs, hashtags and mentions where the public source supplies them. A reel uses its /reel/ source URL. Media URLs can expire. Logged-out visibility is often narrower than the grid shown to a logged-in person, so a profile's advertised post count is not a guarantee of the number retrievable from its public timeline.

Input

FieldBehavior
modeUse profile, posts or reels for the public HTTP route.
usernameA handle, @handle or public profile URL. Default: instagram.
maxResultsMaximum exported rows. Public modes accept 1–1,000; default is two.
maxPagesMaximum source timeline pages, 1–50; default five. Applies to public posts/reels.
postedAfter, postedBeforeInclusive YYYY-MM-DD UTC dates. Public posts/reels only, with useInstagrapi=false.
includeEngagementAdd a post engagement count or an available public profile sample rate.
includeSentimentOptional keyword-based positive/negative/neutral label.
includeLeadScoreOptional rule-based profile score, 0–100.
extractEmails, extractPhonesInclude contacts published in the profile or its bio.
minFollowers, maxFollowers, verifiedOnlyFilter the public profile before exporting profile or timeline rows.
sessionCookieOptional caller-supplied session; use only access you are authorized to use.
useInstagrapiLegacy authenticated route; keep false for the documented public date-filter workflow.

Example input: September NASA posts

{
"mode": "posts",
"username": "nasa",
"postedAfter": "2026-09-01",
"maxResults": 3,
"maxPages": 2,
"includeEngagement": false,
"includeSentiment": false,
"useInstagrapi": false
}

The date filter applies to the source timestamp, converted to UTC. It includes the start and end dates. Missing or unparseable post timestamps do not pass an active date filter. An invalid calendar date, reversed date range or date filter used with another mode fails validation before network requests.

Pagination keeps scanning within maxPages when early rows are outside the requested date range. This matters for pinned posts and mixed-age timelines. It removes duplicate shortcodes across pages and retry routes, detects repeated source cursors and respects the run's charge cap. The number returned can be below maxResults when the public timeline ends or a filter removes records.

Example output

One complete record from a verified September 9, 2026 cloud run. Values and public media URLs can change or expire; this is a dated sample.

{
"username": "nasa",
"url": "https://www.instagram.com/p/DdEy97xj9P-/",
"shortcode": "DdEy97xj9P-",
"caption": "Some things are worth repeating 📸\n\nLike observing a galaxy cluster! This image of the cluster Abell S0740 was created by combining several @NASAHubble science observations. Hubble's multiple looks at the cluster revealed a diverse collection of galaxies including a giant, bright elliptical galaxy just off center. That galaxy is as massive as 100 billion of our Suns, by the way.\n \nCredit: NASA\n\n#NASA #Hubble #Stars",
"likes": 67867,
"comments_count": 247,
"timestamp": "2026-09-09T17:27:34+00:00",
"images": [
"https://scontent-ord5-1.cdninstagram.com/v/t51.82787-15/801962799_18646148242049152_8221282425578912411_n.jpg?stp=dst-jpg_e35_tt6&_nc_cat=1&ig_cache_key=Mzk4MjUzMjEyODg5ODI3NDMwMg%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkZFRUQueHBpZHMuNzE5LnNkci5yZWd1bGFyX3Bob3RvLkMzIn0%3D&_nc_ohc=jbFgdr3Pvs4Q7kNvwHusEMy&_nc_oc=Adrui-Y6wz_HWK-EM2wgrjsLVQhWvlQphht5CAUXLclqov2QcXhw7DB_Pw9rAvdGjfk&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-ord5-1.cdninstagram.com&_nc_gid=g1JC2NlYH0UmfsMVmxvu_A&_nc_ss=7a22e&oh=00_AQL1_e3AEwdyHPwo6Gw14N0ckYxlte0pZkxM0ZSU_1iIRA&oe=6AA79387",
"https://scontent-ord5-1.cdninstagram.com/v/t51.82787-15/801962799_18646148242049152_8221282425578912411_n.jpg?stp=dst-jpg_e35_p640x640_sh2.08_tt6&_nc_cat=1&ig_cache_key=Mzk4MjUzMjEyODg5ODI3NDMwMg%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkZFRUQueHBpZHMuNzE5LnNkci5yZWd1bGFyX3Bob3RvLkMzIn0%3D&_nc_ohc=jbFgdr3Pvs4Q7kNvwHusEMy&_nc_oc=Adrui-Y6wz_HWK-EM2wgrjsLVQhWvlQphht5CAUXLclqov2QcXhw7DB_Pw9rAvdGjfk&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-ord5-1.cdninstagram.com&_nc_gid=g1JC2NlYH0UmfsMVmxvu_A&_nc_ss=7a22e&oh=00_AQL0vxzE8MG20C_CtFgyj1KKQ0LoMQkYfDwtAUDUzemeBw&oe=6AA79387",
"https://scontent-ord5-1.cdninstagram.com/v/t51.82787-15/801962799_18646148242049152_8221282425578912411_n.jpg?stp=dst-jpg_e35_p480x480_tt6&_nc_cat=1&ig_cache_key=Mzk4MjUzMjEyODg5ODI3NDMwMg%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkZFRUQueHBpZHMuNzE5LnNkci5yZWd1bGFyX3Bob3RvLkMzIn0%3D&_nc_ohc=jbFgdr3Pvs4Q7kNvwHusEMy&_nc_oc=Adrui-Y6wz_HWK-EM2wgrjsLVQhWvlQphht5CAUXLclqov2QcXhw7DB_Pw9rAvdGjfk&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-ord5-1.cdninstagram.com&_nc_gid=g1JC2NlYH0UmfsMVmxvu_A&_nc_ss=7a22e&oh=00_AQLC8eWglY4JryDA8PM0naJPvTposWCFXtqnTaCxHqn0UA&oe=6AA79387",
"https://scontent-ord5-1.cdninstagram.com/v/t51.82787-15/801962799_18646148242049152_8221282425578912411_n.jpg?stp=dst-jpg_e35_p320x320_tt6&_nc_cat=1&ig_cache_key=Mzk4MjUzMjEyODg5ODI3NDMwMg%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkZFRUQueHBpZHMuNzE5LnNkci5yZWd1bGFyX3Bob3RvLkMzIn0%3D&_nc_ohc=jbFgdr3Pvs4Q7kNvwHusEMy&_nc_oc=Adrui-Y6wz_HWK-EM2wgrjsLVQhWvlQphht5CAUXLclqov2QcXhw7DB_Pw9rAvdGjfk&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-ord5-1.cdninstagram.com&_nc_gid=g1JC2NlYH0UmfsMVmxvu_A&_nc_ss=7a22e&oh=00_AQLMYHLyfpgNPS1o0L_ZxJ-zKoL94DCmL1H4DlNR3pru6Q&oe=6AA79387",
"https://scontent-ord5-1.cdninstagram.com/v/t51.82787-15/801962799_18646148242049152_8221282425578912411_n.jpg?stp=dst-jpg_e35_p240x240_tt6&_nc_cat=1&ig_cache_key=Mzk4MjUzMjEyODg5ODI3NDMwMg%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkZFRUQueHBpZHMuNzE5LnNkci5yZWd1bGFyX3Bob3RvLkMzIn0%3D&_nc_ohc=jbFgdr3Pvs4Q7kNvwHusEMy&_nc_oc=Adrui-Y6wz_HWK-EM2wgrjsLVQhWvlQphht5CAUXLclqov2QcXhw7DB_Pw9rAvdGjfk&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-ord5-1.cdninstagram.com&_nc_gid=g1JC2NlYH0UmfsMVmxvu_A&_nc_ss=7a22e&oh=00_AQKqItyV7EnevD-rq5i0oXf1CDOSdxRzf9RPjM1pYAPitg&oe=6AA79387",
"https://scontent-ord5-1.cdninstagram.com/v/t51.82787-15/801962799_18646148242049152_8221282425578912411_n.jpg?stp=c0.40.719.719a_dst-jpg_e35_s719x719_tt6&_nc_cat=1&ig_cache_key=Mzk4MjUzMjEyODg5ODI3NDMwMg%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkZFRUQueHBpZHMuNzE5LnNkci5yZWd1bGFyX3Bob3RvLkMzIn0%3D&_nc_ohc=jbFgdr3Pvs4Q7kNvwHusEMy&_nc_oc=Adrui-Y6wz_HWK-EM2wgrjsLVQhWvlQphht5CAUXLclqov2QcXhw7DB_Pw9rAvdGjfk&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-ord5-1.cdninstagram.com&_nc_gid=g1JC2NlYH0UmfsMVmxvu_A&_nc_ss=7a22e&oh=00_AQIwhStSSVysTH6dZG32AT8rMWvQI9ZRvIwvO4rCe3uFoQ&oe=6AA79387",
"https://scontent-ord5-1.cdninstagram.com/v/t51.82787-15/801962799_18646148242049152_8221282425578912411_n.jpg?stp=c0.40.719.719a_dst-jpg_e35_s719x719_tt6&_nc_cat=1&ig_cache_key=Mzk4MjUzMjEyODg5ODI3NDMwMg%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkZFRUQueHBpZHMuNzE5LnNkci5yZWd1bGFyX3Bob3RvLkMzIn0%3D&_nc_ohc=jbFgdr3Pvs4Q7kNvwHusEMy&_nc_oc=Adrui-Y6wz_HWK-EM2wgrjsLVQhWvlQphht5CAUXLclqov2QcXhw7DB_Pw9rAvdGjfk&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-ord5-1.cdninstagram.com&_nc_gid=g1JC2NlYH0UmfsMVmxvu_A&_nc_ss=7a22e&oh=00_AQIwhStSSVysTH6dZG32AT8rMWvQI9ZRvIwvO4rCe3uFoQ&oe=6AA79387",
"https://scontent-ord5-1.cdninstagram.com/v/t51.82787-15/801962799_18646148242049152_8221282425578912411_n.jpg?stp=c0.40.719.719a_dst-jpg_e35_s640x640_sh2.08_tt6&_nc_cat=1&ig_cache_key=Mzk4MjUzMjEyODg5ODI3NDMwMg%3D%3D.3-ccb7-5&ccb=7-5&_nc_sid=58cdad&efg=eyJ2ZW5jb2RlX3RhZyI6IkZFRUQueHBpZHMuNzE5LnNkci5yZWd1bGFyX3Bob3RvLkMzIn0%3D&_nc_ohc=jbFgdr3Pvs4Q7kNvwHusEMy&_nc_oc=Adrui-Y6wz_HWK-EM2wgrjsLVQhWvlQphht5CAUXLclqov2QcXhw7DB_Pw9rAvdGjfk&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_ht=scontent-ord5-1.cdninstagram.com&_nc_gid=g1JC2NlYH0UmfsMVmxvu_A&_nc_ss=7a22e&oh=00_AQLPVV8wzxoPzSxNeQEr4hOZKMaCJWbeTgMkp4D4wOawuA&oe=6AA79387"
],
"videos": [],
"hashtags": [
"NASA",
"Hubble",
"Stars"
],
"mentions": [
"NASAHubble"
],
"is_video": false,
"product_type": "feed",
"scraped_at": "2026-09-09T19:30:46.098676+00:00"
}

The dataset also includes caption, images, videos, hashtags, mentions, product_type and scraped_at for the public post route. Optional post fields are engagement_score and sentiment; reels add type. Profile fields differ from post fields, so use JSON when preserving all source attributes matters, or select the columns needed for a spreadsheet.

The run's SUMMARY key-value record reports processed items, fetched timeline pages, duplicate posts, date-filtered posts and the stop reason. result_limit, page_limit, time_limit and charge_limit describe bounded results. public_timeline_exhausted means the public source connection ended, not that every post visible to every logged-in account was available. A valid filter can produce no rows.

The Actor tries a direct request, a fresh direct session and an available US residential proxy when public profile access fails. Source restrictions can still block all attempts. A source failure marks the run failed and preserves any already-written rows; inspect SUMMARY and the dataset before retrying. It never treats an unrelated profile as a successful result.

Metrics and pricing

The post engagement score is likes plus twice the comment count. The optional profile rate is mean likes from an available public sample divided by follower count, expressed as a percentage. An unavailable sample leaves the optional rate absent. These observations are not audience-growth measurements or evidence of genuine engagement. Lead scoring and sentiment are simple rules, not trained predictions.

Established pricing remains unchanged: Free is $0.0025 per exported result, or $2.50 per 1,000, plus the existing start event of $0.00005 per GB with a minimum of one. Bronze is $2.25/1,000, Silver $2.125, Gold $2.00, Platinum $1.875 and Diamond $1.75. The Store pricing panel and actual run usage are authoritative. Optional proxy use affects resource usage; a spending cap can reduce the exported count.

Compatibility modes

The input retains older browser routes for comments, followers, following, hashtags, search and stories, plus an optional authenticated library path. They were not verified by this public-profile/timeline release and can require authorized session access or encounter restrictions. The public date filters are deliberately rejected on these routes instead of silently ignored. This page does not promise private-profile access, a complete follower list, exhaustive keyword search or a historical Stories archive.

Python API workflow

Copy the first input JSON above into input.json and save this code as export.py. In a Python virtual environment, install apify-client with python -m pip install apify-client. Set APIFY_TOKEN to your own Apify token in your environment, then run python export.py. Keep the token out of source files and shared screenshots.

import json
import os
from decimal import Decimal
from pathlib import Path
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("benthepythondev/instagram-intelligence-scraper").call(
run_input=json.loads(Path("input.json").read_text(encoding="utf-8")),
max_total_charge_usd=Decimal("0.05"),
memory_mbytes=1024,
timeout_secs=300,
)
if not run or run["status"] != "SUCCEEDED":
raise RuntimeError(f"Inspect the run before retrying: {run and run['id']}")
rows = list(client.dataset(run["defaultDatasetId"]).iterate_items())
Path("nasa-instagram-posts.json").write_text(
json.dumps(rows, ensure_ascii=False, indent=2), encoding="utf-8"
)
print(f"Saved {len(rows)} records from run {run['id']}")

This starts a run in your account, waits for completion and saves nasa-instagram-posts.json. The $0.05 limit bounds Actor charges; it is not a promised bill or result count. Check the printed run ID and server log if the result is shorter than expected. If your client loses its connection, inspect the existing run in Console before starting another one. See the official Python client for other run options.

Use shortcode as the post key and retain the complete caption and UTC timestamp. Upsert by shortcode to avoid duplicate posts, or keep scraped_at for an observation history. Scheduling does not create a complete timeline archive; public visibility and scan bounds still apply.

For recurring runs without writing a scheduler, copy a tested public Task into your account and attach an Apify Schedule to that copy. Keep its maximum-charge limit and avoid overlapping runs when using monitor state. The Python example above is also suitable for an existing scheduler; run it from the directory containing input.json and provide the token through that scheduler's secret settings.

FAQ

Can I get every post from a profile? Only posts exposed by the public timeline within the page, time and result bounds. Logged-in counts can be higher.

Why can a recent-date search return fewer rows? The Actor filters actual source dates. Old or pinned content can fill part of the scanned window, and the public timeline may expose only a subset.

Are captions complete? The public timeline caption is kept without the previous 2,000-character truncation. This does not add text missing from Instagram's own response.

Does the date filter apply to comments or follower lists? No. It applies to public post/reel timestamps and rejects other mode combinations.

Will retries charge duplicate posts? Successful shortcode exports are tracked within the run and excluded on a retry. As with any interrupted export, use shortcodes to reconcile partial datasets downstream.

Does it need my Instagram password? The public route does not. Legacy authenticated inputs are separate and were not used in the documented public tests.

Can I build daily alerts? Yes. Schedule a Task and compare shortcodes in your database. This Actor does not keep cross-run only-new state itself.

Are all metrics exact or independently verified? They are values exposed by the source. Missing visibility and hidden counts limit what can be reported.

How should I use the data? Follow applicable law, Instagram's terms and your organization's data rules. Public visibility does not grant unrestricted permission for every downstream use.

Meta Ad Library is a separate advertising-data workflow, not organic Instagram posts. Facebook Pages exports public organizational Page metadata. LinkedIn Company Scraper checks exact company identity before export.

Keywords: Instagram scraper, public profile data, Instagram posts, Instagram reels, full captions, date filter, UTC timestamps, shortcodes, engagement counts, public biography, social media research, JSON export, CSV export, timeline pagination.