Instagram Creator Scraper avatar

Instagram Creator Scraper

Pricing

from $8.00 / 1,000 results

Go to Apify Store
Instagram Creator Scraper

Instagram Creator Scraper

Instagram creator lookup at scale — pass up to 1,000 usernames, @handles, or instagram.com URLs in a single call. Each row returns the structured profile: name, bio, follower count, post count, business or creator account flag, verified badge, listed business email and phone, and category tags.

Pricing

from $8.00 / 1,000 results

Rating

5.0

(2)

Developer

AgentX

AgentX

Maintained by Community

Actor stats

1

Bookmarked

35

Total users

4

Monthly active users

7 days ago

Last modified

Share

Instagram Creator Scraper turns a list of Instagram usernames, handles, or profile URLs into one consistent 35-field public profile record per creator, for influencer research, CRM enrichment, and agent workflows.

  • One required input. Send 1–1,000 usernames, @handles, or instagram.com profile URLs in a single array.
  • 35 fixed top-level fields. Successful and explicit not-found rows use the same keys, so downstream code never branches on account type.
  • Recent posts included. Each row carries the profile's recent public post links with type, publish time, likes, comments, and views.
  • Billed per returned row. A target that produces no Dataset row produces no Result event.

Run a small test · View API

The smallest useful test is a single public username: one Actor Start event plus one Result event, or $0.01800 on the FREE tier.

What does Instagram Creator Scraper do?

Instagram spreads creator information across identity text, account flags, audience counts, business fields, bio links, a recent-post strip, and related-profile suggestions. Those values are not exposed the same way for personal, creator, professional, business, public, and private accounts. This Actor collects what a public profile exposes and returns it as one predictable record shape.

Every row carries the normalized target in requested_input, a processing timestamp, and a status value of either success or not found. An explicit not-found response still produces a row with the same 35 keys and null profile values, which makes reconciliation straightforward.

The Actor does not do several things on purpose. It does not accept post, reel, story, TV, explore, GraphQL, or account-management URLs as targets. It does not log in, accept Instagram credentials, or reach private content. It does not return email or phone fields, does not paginate a full post history, and does not calculate engagement rate, growth, audience quality, or fake-follower probability.

How do I use Instagram Creator Scraper?

  1. Open the Actor and paste one or more public profile targets into 🔗 Instagram Profiles.
  2. Start with a single username to confirm the shape of the returned row.
  3. Run the Actor, then compare the Dataset item count with your submitted list.
  4. Scale up to larger batches once the smallest run looks correct.

Smallest useful input:

{
"instagram_url": ["mkbhd"]
}

The prefilled Console example uses two targets so you can see both a plain username and a full profile URL:

{
"instagram_url": ["mkbhd", "https://www.instagram.com/zachking/"]
}

A terminal SUCCEEDED run status means the Actor finished. It does not promise one row per submitted target, so always check status, requested_input, and the Dataset item count.

Input configuration

FieldTypeRequiredBehavior
instagram_urlarray of stringsYes1–1,000 usernames, @handles, or instagram.com profile URLs

Accepted list items include mkbhd, @mkbhd, instagram.com/mkbhd, and https://www.instagram.com/mkbhd/. Query strings, fragments, trailing paths, the leading @, and surrounding slashes are removed before the lookup runs.

Entries that normalize to a non-profile route — p, reel, reels, stories, tv, explore, graphql, or accounts — are discarded. Duplicate normalized usernames are looked up once, and the comparison ignores letter case. If nothing valid remains after normalization, the run exits with an input error instead of producing an empty Dataset.

The normalized target becomes the row's requested_input and is used to build profile_url. Only submit profile data you have a lawful purpose to collect.

Output

Every row has the same 35 top-level keys.

GroupFields
Identityusername, full_name, user_id, facebook_id, avatar_url, profile_url
Audience and contentfollowers, following, posts, reels, highlights
Account flagsis_verified, is_private, is_professional, is_business, has_clips, has_threads, hide_counts
Classificationcategory, category_type, business_category
Bio detailsbio, bio_mentions, bio_hashtags, pronouns, website, bio_links
Business contactcontact_method, address
Discoveryrelated_profiles, recent_posts
Run statestatus, requested_input, processor, processed_at

recent_posts is the profile page's recent public post strip, not the full post history. Each entry contains url, type (image, video, carousel, or reel), posted_at, likes, comments, and views. It is empty for private accounts and for accounts with no visible posts, even when posts is above zero. When hide_counts is true, the account hides like and view counts on its public pages while the numbers in recent_posts still come from the source response.

Abbreviated illustrative item — counts and links change between runs:

{
"status": "success",
"requested_input": "mkbhd",
"user_id": "180500541",
"username": "mkbhd",
"full_name": "Marques Brownlee",
"bio": "Quality Tech Videos",
"bio_mentions": ["waveformpodcast"],
"bio_hashtags": [],
"pronouns": [],
"website": "https://www.youtube.com/mkbhd",
"bio_links": ["https://www.youtube.com/mkbhd"],
"contact_method": "UNKNOWN",
"address": null,
"category": null,
"category_type": "CREATORS",
"business_category": null,
"is_private": false,
"is_verified": true,
"is_professional": true,
"is_business": false,
"has_clips": true,
"has_threads": true,
"hide_counts": false,
"followers": 5124300,
"following": 582,
"posts": 2111,
"reels": 148,
"highlights": 6,
"related_profiles": ["zachking", "waveformpodcast"],
"avatar_url": "https://scontent.example/profile-hd.jpg",
"profile_url": "https://www.instagram.com/mkbhd/",
"recent_posts": [
{
"url": "https://www.instagram.com/p/CxAmPle1234/",
"type": "carousel",
"posted_at": "2026-07-26T14:11:03+00:00",
"likes": 91422,
"comments": 1173,
"views": null
}
]
}

Source-dependent fields can be null or empty. category, business_category, contact_method, address, pronouns, and related_profiles are frequently absent, and a null value is not evidence that the creator has no such attribute. is_verified is the raw source flag, not independent identity verification.

Use cases

Influencer and creator research teams can snapshot audience size, content volume, category labels, bio links, and recent post engagement for a shortlist before manual qualification. Pair recent_posts engagement with followers to sanity-check whether a large account is actually active.

CRM and lead-enrichment pipelines can attach website, bio_links, contact_method, address, business_category, and the professional and business flags to existing records. Because contact fields are optional at the source, treat null as a normal result and validate ownership, accuracy, and consent before any outreach.

Discovery workflows can use related_profiles and bio_mentions as seed signals, then submit selected usernames in a follow-up run to expand a creator map. The related list is source-generated, so treat it as a suggestion rather than a similarity guarantee.

Choose a different tool if you need full post history, comments, followers lists, hashtag or location search, ad-library data, or anything behind a login. This Actor is scoped to public profile records.

API and integrations

The Actor ID is agentx/instagram-creator-scraper. Keep your Apify token in an environment secret.

curl -X POST "https://api.apify.com/v2/acts/agentx~instagram-creator-scraper/runs?token=$APIFY_TOKEN&waitForFinish=180" \
-H "Content-Type: application/json" \
-d '{"instagram_url":["mkbhd","https://www.instagram.com/zachking/"]}'
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("agentx/instagram-creator-scraper").call(
run_input={"instagram_url": ["mkbhd", "https://www.instagram.com/zachking/"]}
)
items = list(client.dataset(run["defaultDatasetId"]).iterate_items())

MCP call arguments:

{
"actor": "agentx/instagram-creator-scraper",
"input": {
"instagram_url": ["mkbhd", "https://www.instagram.com/zachking/"]
},
"callOptions": {"build": "latest", "memory": 256, "timeout": 180}
}

Generated SDK snippets and the OpenAPI definition are available on the API page. For scheduled or queued integrations, store your internal job ID, the original submitted string, the normalized username, the Apify run ID, and the returned Dataset row. That makes three per-target outcomes distinguishable: a success row, an explicit not-found row, and no row at all.

Pricing

This Actor uses pay-per-event pricing. Two events are billed.

EventUnitFREEBRONZESILVERGOLDPLATINUMDIAMOND
Actor StartOne charged start event per run, by memory (one per GB, minimum one)$0.01000$0.01000$0.01000$0.01000$0.01000$0.01000
ResultOne returned Dataset row$0.00800$0.00720$0.00640$0.00600$0.00600$0.00600

Smallest useful run on the FREE tier: one profile returns one row, so the run costs $0.01000 + $0.00800 = $0.01800. The Actor defaults to 256 MB, so a run is charged one Actor Start event.

Billing follows returned Result events. A submitted target that produces no Dataset row does not create a Result event. Set a maximum total charge in the calling platform if you want a hard ceiling, and check current prices on the Store page before budgeting a large batch.

Limits and troubleshooting

Source availability changes. A username can be renamed, removed, restricted, made private, rate-limited, or temporarily unreachable, and the Actor cannot make Instagram return fields the profile does not expose.

Fewer rows than submitted targets. Confirm every entry is a profile target rather than a post, reel, story, or explore route. Compare normalized targets with returned requested_input values, then retry only the missing ones in a small batch after a short delay. Keep the first Dataset so a retry does not overwrite a useful snapshot.

Run fails with an input error. The input must be an array of strings with 1–1,000 entries, and at least one entry must normalize to a valid username.

Run reports that no profiles could be returned. Every target failed before a usable response was obtained. Re-run a single known-public username to separate a source-side problem from an input problem.

Empty recent_posts on an account with posts. The profile is private, or the source did not expose the recent-post strip for that response. This field is a sample, not a post-history endpoint.

Counts differ from another tool. Values are snapshots taken at processed_at. Compare timestamps and account identity before treating a difference as an error, and store dated runs rather than overwriting previous values.

Frequently asked questions

Do I get one row for every submitted username? Not guaranteed. Explicit not-found responses produce a row, but a target whose requests all fail can produce no row. Reconcile with requested_input and the Dataset count.

Does the Actor return email or phone numbers? No. It returns contact_method and a structured address when the source exposes them. There are no email or phone fields.

Can I submit post or reel URLs? No. Those routes are discarded during normalization. Use Instagram Reel Scraper for reel-level data.

What does is_verified mean? It is the boolean flag Instagram returns for the account. It is not proof of identity, ownership, safety, or business legitimacy.

Are private accounts supported? The Actor returns whatever the public surface exposes plus the is_private flag. It does not bypass access controls, so most content fields stay empty for private accounts.

How is posts different from recent_posts? posts is the total timeline count reported by Instagram. recent_posts is the recent public post strip shown on the profile, so its length is much smaller than posts.

Is duplicate input charged twice? No. Duplicate normalized usernames are looked up once and produce one row, so one Result event.

Enrich your data with AgentX

  • All Video Scraper — extend a creator record with their video output across supported video platforms.
  • All Shopping Scraper — match the products and brands a creator links to with live retail listings.
  • All Jobs Scraper — check hiring signals for the company behind a professional or business account.

Support

Questions, bugs, or a field that looks wrong? Open an issue on the Actor page or message AiAgentApi support. Include the run ID, Dataset ID, non-secret input, the expected target, and the exact field involved. Never post API tokens or private personal data.

Review the Instagram Terms of Use, the Meta Privacy Policy, and applicable privacy and anti-spam law before collecting or reusing creator data. Public visibility does not by itself authorize unrestricted reuse or outreach.

Run a small test · View API