SocialGrid — Instagram Scraper avatar

SocialGrid — Instagram Scraper

Pricing

Pay per usage

Go to Apify Store
SocialGrid — Instagram Scraper

SocialGrid — Instagram Scraper

Unified-schema Instagram profile data via a residential proxy AND an authenticated session (Instagram requires both — logged-out GraphQL queries are rejected regardless of IP, see PLAN.md). Reduced-surface MVP: profile only; posts/comments/search/trending are deferred.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Giovanni

Giovanni

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

4 days ago

Last modified

Categories

Share

Unofficial community Actor. Not affiliated with, endorsed by, or sponsored by Instagram or Meta.

Unified-schema Instagram profile data — flat, agent-ready JSON extracted via a real Playwright browser session, never a raw GraphQL response dump. Requires both a residential proxy and an authenticated Instagram session (see Input below) — Instagram rejects logged-out profile queries outright, regardless of IP or browser fingerprint.

Why this vs. a raw-blob scraper

Instagram's web_profile_info/GraphQL response is a deeply nested internal object (edge_followed_by, hd_profile_pic_url_info, dozens of feature flags) built for Instagram's own web client, not for downstream consumption. This actor extracts the same Author shape used across SocialGrid's YouTube/TikTok/Instagram scrapers, so an LLM agent or analytics pipeline can treat every platform identically. Fields Instagram doesn't expose (e.g. total_likes — Instagram has no such aggregate) come back as null, never 0.

What it does — and honestly, what it doesn't (yet)

Implemented and live-verified:

ModeDescriptionKey input
profileAccount profile: display name, bio, avatar, follower/following/post counts, verified, private flag, external linkshandle

Explicitly NOT implemented in this MVPposts, comments, search, and trending are deferred, not attempted this pass. This actor is single-purpose (profile lookup) for now.

Why authentication is required (not just a proxy)

Modern Instagram no longer server-renders profile data into the page HTML at all — it's a client-side-only app shell. The real data lives behind an internal GraphQL/web_profile_info endpoint that returns "Unauthorized logged out query." for any request without a real, logged-in session — independent of proxy quality or browser fingerprint. There is no unauthenticated path to this data anymore.

This actor never automates Instagram's login form — that flow is far more bot-defended than viewing profiles and risks the account. Instead, you provide three cookies from your own real, manual browser login:

  1. Log in to instagram.com normally, in a real browser.
  2. Open DevTools → Application/Storage → Cookies → https://www.instagram.com.
  3. Copy the values of sessionid, ds_user_id, and csrftoken.
  4. Pass them as igSessionId, igDsUserId, igCsrfToken in the actor input (marked as secret fields — they're never logged or echoed).

These cookies belong to a real Instagram account, so treat them like any other credential: expect them to expire or be invalidated by Instagram at any time (password change, suspicious-activity flag, manual logout elsewhere), at which point the actor starts failing with the same "Unauthorized logged out query" error and the cookies need refreshing from a fresh manual login.

Example output (mode: "profile")

{
"success": true,
"platform": "instagram",
"mode": "profile",
"data": {
"platform": "instagram",
"id": "25025320",
"handle": "instagram",
"display_name": "Instagram",
"bio": "Discover what's new on Instagram 🔎✨",
"avatar_url": "https://scontent...cdninstagram.com/...",
"verified": true,
"followers": 685839159,
"following": 256,
"post_count": 8522,
"total_likes": null,
"external_links": [
"https://www.youtube.com/watch?v=H6G9PcvHjj4",
"https://open.spotify.com/episode/..."
],
"is_private": false
}
}

Input

  • mode (required): profile — the only implemented mode
  • handle (required for profile): account handle (instagram) or full profile URL
  • proxyGroup (default RESIDENTIAL): Apify proxy group — Instagram requires a residential proxy to work at all
  • igSessionId, igDsUserId, igCsrfToken (all required, secret): cookies from a real, human-completed login — see above

Usage

Apify CLI

apify actors call fulinlabs/socialgrid-instagram-scraper \
--input '{"mode": "profile", "handle": "instagram", "igSessionId": "...", "igDsUserId": "...", "igCsrfToken": "..."}'

REST API

curl "https://api.apify.com/v2/acts/fulinlabs~socialgrid-instagram-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode": "profile", "handle": "instagram", "igSessionId": "...", "igDsUserId": "...", "igCsrfToken": "..."}'

Pricing

Benchmarked against comparable Store Instagram profile scrapers (Apify's official Instagram Profile Scraper at ~$1.60–2.60/1,000 profiles, third-party alternatives from $0.50–$20/1,000). Because this actor runs a full headless-Chromium session per call (heavier compute than a plain HTTP scraper) and depends on a maintained authenticated session, pricing sits at the higher end of that band:

  • profile: $2.00 per 1,000 results

Reliability & known risks

  • Standing operational dependency: the Instagram account behind the session cookies is real and subject to Meta's ban/challenge risk for automation-adjacent activity. Session expiry requires a human to manually re-log-in and refresh the cookies — this is not a one-time setup cost.
  • Runs on Apify's official apify/actor-node-playwright-chrome:22 base image with a real Chromium browser — slower and more resource-intensive per call than a plain HTTP-based scraper.
  • A 6-hour canary schedule re-runs the live test suite (getProfile against a known fixture + a nonexistent-handle error case) and alerts on failure.