Scraper API

Instagram Posts Scraper API

for public accounts, by handle

Pull the latest posts from any public Instagram account by handle. One request returns each post with its caption, hashtags, likes, comments, media URLs, and timestamp as clean JSON. No tokens, no headless browsers.

SUCCESS
99.9%

of requests succeed

P50
3.3s

median response

P95
4.0s

95% finish faster

PRICE
$0.75

per 1k post feeds at volume

Stop maintaining scrapers

Instagram renders the feed client-side. Your parser shouldn't care.

  • Posts loaded by script, not in the HTML
  • Media URLs behind expiring CDN links
  • Feed paged by an opaque cursor
  • Login walls on public profiles
  • Re-parse the feed after each app change
One integration commit replaces a backlog you’ll never finish.
scraper | git log
hotfix: feed empty, rendered client-side now
fix: media URL expired before download
fix: caption truncated mid-emoji
chore: rotate proxies for ig runs again
fix: cursor stopped paging past 12
hotfix: login wall on a public account
fix: likes came back as a string
chore: refresh residential IPs by region
fix: carousel images missing on some posts
fix: retry storm on rate limits
hotfix: feed empty, rendered client-side now
fix: media URL expired before download
fix: caption truncated mid-emoji
chore: rotate proxies for ig runs again
fix: cursor stopped paging past 12
hotfix: login wall on a public account
fix: likes came back as a string
chore: refresh residential IPs by region
fix: carousel images missing on some posts
fix: retry storm on rate limits
hotfix: feed empty, rendered client-side now
fix: media URL expired before download
fix: caption truncated mid-emoji
chore: rotate proxies for ig runs again
fix: cursor stopped paging past 12
hotfix: login wall on a public account
fix: likes came back as a string
chore: refresh residential IPs by region
fix: carousel images missing on some posts
fix: retry storm on rate limits
hotfix: feed empty, rendered client-side now
fix: media URL expired before download
fix: caption truncated mid-emoji
chore: rotate proxies for ig runs again
fix: cursor stopped paging past 12
hotfix: login wall on a public account
fix: likes came back as a string
chore: refresh residential IPs by region
fix: carousel images missing on some posts
fix: retry storm on rate limits
feat: integrate HasData API
Code Examples

One GET Request. That's the whole integration.

Start with just a query. Add more parameters when your use case needs them.

request example
curl -G 'https://api.hasdata.com/scrape/instagram/posts' \
	--data-urlencode 'handle=hasdatadotcom' \
	--data-urlencode 'limit=12' \
	--header 'x-api-key: <YOUR_API_KEY>' \
	--header 'Content-Type: application/json'
handle * Instagram Handle
The Instagram username of the account whose posts you want to scrape, without the `@` symbol.
limit Results Limit
The maximum number of posts to retrieve per request. Defaults to 12.
nextPageToken Next Page Token
Defines the next page token. It is used for retrieving the next page results. Use the `nextPageToken` value returned by the previous response.
TRY ALL 3 PARAMETERS FREE
Response

Every post, one predictable schema

Each post comes back with the same keys, caption, hashtags, counts, media, and a timestamp. Map the fields once and forget about it.

account.json
// The account the posts belong to, returned alongside the feed.

{
  "username": "nasa",
  "id": "528817151",
  "fullName": "NASA",
  "verified": true,
  "profilePicUrl": "https://instagram.fxxx.fna.fbcdn.net/v/t51.2885-19/29090066_159271188110124_n.jpg",
  "fbid": "17841401474538262"
}
Fields in account
username / id string

Handle and numeric account ID

fullName string

Display name on the profile

verified boolean

Whether the account is verified

profilePicUrl string

Avatar image URL

fbid string

Internal account identifier

What We Offer

An all-in-one scraping service

Every feature you need to collect data from thousands to millions of requests.

Loved by developers

Teams that deleted their scraper

Now it's the part of the pipeline they don't think about

4.8 ★★★★★
across 100+ reviews on 5 platforms
Trustpilot Trustpilot ★★★★★

HasData delivers exactly what we need: speed and comprehensive search features. It's the fastest API we've used in this space. Plus, their customer support is fantastic.

Denver Sinclair
Denver Sinclair
Capterra Capterra ★★★★★

We rely on HasData for search performance data and broader scraping needs. Their APIs deliver highly structured data that integrates directly into our platforms.

JN
Jacob N.
Trustpilot Trustpilot ★★★★★

Great web scraping API which is incredibly easy to use. It requires minimal effort to get up and running, and the documentation is very clear and helpful.

Arnold Foster
Arnold Foster
Trustpilot Trustpilot ★★★★★

I needed to scrape some information they didn't already support, and they wrote the code for me right away, which was super nice of them.

Hussein Ali
Hussein Ali
Clutch Clutch ★★★★★

We were particularly impressed with how easily we could integrate HasData into our existing workflow.

TB
Taras Bazyshyn
CEO at BAZTDL Sp. z o.o
Pricing

Plans that get cheaper at scale

Fixed price, fixed volume, no surprises at the end of the month. Upgrade when you need more.

Free
$0 /mo
One-time free trial
100 post feeds to start
1 concurrent request
Team seats
Community support
Start free
Startup
$41 /mo
$2.04 / 1k post feeds
20K post feeds / month
15 concurrent requests
Team seats
Email support
Get started
Business
Recommended
$83 /mo
$0.82 / 1k post feeds
100K post feeds / month
30 concurrent requests
Team seats
Priority email support
Get started
Enterprise
$208 /mo
$0.69 / 1k post feeds
50 concurrent requests
Team seats
Dedicated account manager
Get started
Monthly post feed volume
Free 100K 500K 2M 6M 10M
Best fit
Business
post feeds / mo
100K
Concurrency
30
$ / 1k post feeds
$0.82
$83 /mo
Get Started

Start with 100 free post feeds. No credit card required.

FAQ

Questions, answered

1 Grab your API key 2 Send a GET request 3 Get structured JSON

Your first post feed
is minutes away

100 post feeds free · no credit card