Instagram & TikTok Profile Scraper - Followers, Bio avatar

Instagram & TikTok Profile Scraper - Followers, Bio

Pricing

from $3.30 / 1,000 profiles

Go to Apify Store
Instagram & TikTok Profile Scraper - Followers, Bio

Instagram & TikTok Profile Scraper - Followers, Bio

Get profile stats for Instagram and TikTok accounts in one run: username, followers, following, posts count, engagement and bio. Run it on a schedule to build your own follower-growth history. Export to JSON, CSV or Excel. No login needed. For influencer vetting and reporting. $6 per 1,000 profiles.

Pricing

from $3.30 / 1,000 profiles

Rating

0.0

(0)

Developer

Khandji Omar

Khandji Omar

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

0

Monthly active users

3 days ago

Last modified

Features

Limited permissions

Share

Instagram & TikTok Profile Scraper — Followers, Bio

Get profile stats for Instagram and TikTok accounts in one run: username, followers, following, posts count, engagement and bio. Run it on a schedule to build your own follower-growth history. Export to JSON, CSV or Excel. No login needed. For influencer vetting and reporting.

Price: $6 per 1,000 profiles ($0.006 per profile). The first 10 results of every run are free.

In short: what you give, what you get, what it costs

You giveInstagram and TikTok usernames
We doRead each public profile, and compare with your last run
You getOne row per profile: username, name, followers, following, posts, bio, website, verified and business flags, plus every field the supplier returns (source_data)
It costs$6 per 1,000 profiles, no start fee. From 16 November 2026: +$0.001 per run. Optional scheduled monitoring: +$0.12 per check (one-off runs never pay it). Apify also bills the supplier Actor dami_studio/instagram-profile-scraper that this robot runs for you, at its own price (about $0.70 per 1,000 results). The first 10 results of every run are free of this robot's fee.
It does notRead private accounts. Follower history builds up only if you run it on a schedule

A real result row is shown further down this page.

Free tier — 10 results free on every run

The free results waive this Actor's own fee; the source Actor (dami_studio/instagram-profile-scraper) still bills its own price for every row it returns.

The first 10 results of every run are free, on every run you ever make — not a one-off trial. Run it on your own subjects and see the real output before you are billed for a single result.

One guard: the free allowance never covers more than half of a run, so a run returning 6 results gets 3 free. That keeps the offer sustainable.

What it does

Run it once and get the full, current data as clean rows you can export to JSON, CSV or Excel, or pull through the API. Need only fresh data? Turn on monitorEnabled and schedule it: every later run returns only what is new or changed since the previous one, so you never re-download or re-pay for the same rows.

Compared with scrape-lads/tiktok-profile-scraper

Read on the Store on 2026-10-23 (TikTok Profile Scraper & TikTok Influencer Email Finder). Where it does better, this section says so.

  • Data source: this Actor runs dami_studio/instagram-profile-scraper for you, then cleans and checks every row.
  • Only here (fields its Store page does not list): change_type (new or changed since your last scheduled run); why_it_matters (one-line reading of the row).
  • This Actor's fee is free on the first results of every run, and a hard cost cap (maxTotalChargeUsd) limits it.
  • Price: about $6.7 per 1,000 in total here ($6 for this Actor + $0.7 for dami_studio/instagram-profile-scraper), $1 at scrape-lads/tiktok-profile-scraper.

Why this scraper

  1. Try before you pay. The first 10 results of every run are free, on every run.
  2. Pay only for data delivered. Failed sources and failed inputs are never billed.
  3. Cost cap on this Actor's fee. Set maxTotalChargeUsd to cap this Actor's own fee; the supplier Actor is capped separately on every call, at its own price.
  4. Only-new mode. With monitorEnabled on a schedule, you get just the new or changed rows, plus a spike signal when volume suddenly jumps.
  5. Clean, normalized rows with the same field names every run, plus a RUN_SUMMARY.json — ready for spreadsheets, databases, n8n/Make/Zapier and AI agents (MCP).

Example input

{
"instagramUsernames": [
"nike",
"natgeo"
],
"maxTotalChargeUsd": 1.0
}

This returns the full current data right away. To receive only what is new on a schedule, add "monitorEnabled": true: the first monitored run stores a free baseline, later runs return only new or changed rows. Pin a monitorId to keep separate targets from sharing state.

Output

Each row is one Instagram or TikTok profile. A real row from a run on Apify (long texts are cut here and people's names hidden; your dataset has them in full):

A real row from this Actor's latest run on Apify (2026-10-25; long texts are cut and people's names hidden here, your dataset has them in full):

{
"profile_id": "instagram:nike",
"platform": "instagram",
"username": "(hidden here)",
"followers": 290908835,
"posts_count": 1675,
"latest_post_id": "4014317612986615579",
"bio": "Just Do It.",
"recordType": "profile",
"inputUrl": "https://www.instagram.com/nike/",
"id": "13460080",
"url": "https://www.instagram.com/nike/",
"fullName": "(hidden here)",
"biography": "Just Do It.",
"externalUrl": "http://empli.fi/nike",
"followersCount": 290908835,
"followsCount": 266,
"postsCount": 1675,
"verified": true,
"private": false,
"isBusinessAccount": true,
"isProfessionalAccount": true,
"profilePicUrl": "(hidden here)",
"profilePicUrlHD": "(hidden here)",
"highlightReelCount": 5,
"igtvVideoCount": 20,
"hasChannel": false,
"joinedRecently": false,
"fbid": "17841400602400210",
"dataSource": "profile-api",
"limitedData": false,
"scrapedAt": "2026-10-25T03:16:12.671Z",
"accountType": "business",
"businessAddress_streetAddress": "One Bowerman Dr",
"businessAddress_cityName": "Beaverton, Oregon",
"businessAddress_zipCode": "97005",
"businessAddress_latitude": 45.5076448,
"businessAddress_longitude": -122.8269159,
"accountAbout_available": false,
"engagement_postsAnalysed": 12,
"engagement_avgLikes": 387426.92,
"engagement_medianLikes": 75729.5,
"engagement_avgComments": 2468.42,
"engagement_medianComments": 1285.5,
"engagement_engagementRate": 0.134,
"engagement_engagementPerPost": 389895.33,
"engagement_videoSharePct": 50,
"engagement_avgCaptionLength": 307.1,
"engagement_postsPerWeek": 2.21,
"engagement_lastPostAt": "2026-10-23T14:00:42.000Z",
"engagement_daysSinceLastPost": 1,
"engagement_activeLast30Days": true,
"engagement_topPost_url": "https://www.instagram.com/p/DePopGlnxXJ/",
"engagement_topPost_shortCode": "DePopGlnxXJ",
"engagement_topPost_likesCount": 2188004,
"engagement_topPost_commentsCount": 6063,
"engagement_topPost_timestamp": "2026-10-08T19:00:16.000Z",
"signals_followerTier": "celebrity",
"signals_followerToFollowingRatio": "(hidden here)",
"signals_followsPerPost": 0.16,
"signals_hasContactInfo": false,
"signals_contactEmailCount": "(hidden here)",
"signals_contactPhoneCount": "(hidden here)",
"signals_externalLinkCount": 1,
"signals_bioLength": 11,
"signals_hasBioLink": true,
"videoStats_recentVideos": 6,
"videoStats_videosWithViews": 6,
"videoStats_medianVideoViews": 492458.5,
"videoStats_viewsToFollowersPct": 0.17,
"videoStats_daysSinceLastVideo": 1,
"record_id": "instagram:nike",
"change_type": "new",
"why_it_matters": "A tracked item changed."
}
FieldWhat it holds
platforminstagram or tiktok
usernamehandle
fullNamedisplay name
followersfollowers
followsCountfollowing
posts_countposts
biographybio
externalUrllink in bio
verifiedverified badge
isBusinessAccountbusiness account
businessCategoryNamebusiness category
profilePicUrlHDprofile picture
urlprofile link

Each row also keeps the other fields the source returns, so you get everything above and more. In the Output tab, the Overview table shows these columns, readable without any code; export them as CSV, Excel, JSON or HTML.

Every field

FieldWhat it holds
profile_idprofile id
platformplatform
usernameusername
followersfollowers
posts_countposts count
latest_post_idlatest post id
biobio
recordTyperecord type
inputUrlinput url
idid
urlurl
fullNamefull name
biographybiography
externalUrlexternal url
followersCountfollowers count
followsCountfollows count
postsCountposts count
verifiedverified
privateprivate
isBusinessAccountis business account
isProfessionalAccountis professional account
profilePicUrlprofile pic url
profilePicUrlHDprofile pic url hd
highlightReelCounthighlight reel count
igtvVideoCountigtv video count
hasChannelhas channel
joinedRecentlyjoined recently
fbidfbid
dataSourcedata source
limitedDatalimited data
scrapedAtscraped at
accountTypeaccount type
accountAbout_availableaccount about available
engagement_postsAnalysedengagement posts analysed
engagement_avgLikesengagement avg likes
engagement_medianLikesengagement median likes
engagement_avgCommentsengagement avg comments
engagement_medianCommentsengagement median comments
engagement_engagementRateengagement engagement rate
engagement_engagementPerPostengagement engagement per post
engagement_videoSharePctengagement video share pct
engagement_avgCaptionLengthengagement avg caption length
engagement_postsPerWeekengagement posts per week
engagement_lastPostAtengagement last post at
engagement_daysSinceLastPostengagement days since last post
engagement_activeLast30Daysengagement active last30 days
engagement_topPost_urlengagement top post url
engagement_topPost_shortCodeengagement top post short code
engagement_topPost_likesCountengagement top post likes count
engagement_topPost_commentsCountengagement top post comments count
engagement_topPost_timestampengagement top post timestamp
signals_followerTiersignals follower tier
signals_followerToFollowingRatiosignals follower to following ratio
signals_followsPerPostsignals follows per post
signals_hasContactInfosignals has contact info
signals_contactEmailCountsignals contact email count
signals_contactPhoneCountsignals contact phone count
signals_externalLinkCountsignals external link count
signals_bioLengthsignals bio length
signals_hasBioLinksignals has bio link
videoStats_recentVideosvideo stats recent videos
videoStats_videosWithViewsvideo stats videos with views
videoStats_daysSinceLastVideovideo stats days since last video
record_idrecord id
change_typechange type
why_it_matterswhy it matters
businessAddress_streetAddressbusiness address street address
businessAddress_cityNamebusiness address city name
businessAddress_zipCodebusiness address zip code
businessAddress_latitudebusiness address latitude
businessAddress_longitudebusiness address longitude
videoStats_medianVideoViewsvideo stats median video views
videoStats_viewsToFollowersPctvideo stats views to followers pct
source_dataevery field dami_studio/instagram-profile-scraper returns for this row, untouched

Each row also carries source_data: the full row returned by dami_studio/instagram-profile-scraper, every field it gives, untouched — you never get less than the supplier itself delivers. Our own fields above stay exactly as they are. A row over 200 KB is trimmed and source_data_trimmed lists the fields cut.

How you're charged

  • Source Actor charge: this Actor runs dami_studio/instagram-profile-scraper inside your run, and Apify bills that run to your account at dami_studio/instagram-profile-scraper's own price (about $0.7 per 1,000 results, read on 2026-10-23), on top of this Actor's price. Each call to it is capped at $0.50.
  • Profile — $0.006 per profile ($6 per 1,000), billed for each profile delivered to your dataset. With scheduled monitoring on, only profiles that are new or changed since the last check are delivered and billed.
  • Scheduled monitoring check ($0.12) — only when you turn on scheduled monitoring (monitorEnabled), once per target per run, and only when the source responded. One-off runs never pay it: you pay only per result.
  • One-off runs pay only per result. The monitoring check applies only to scheduled monitoring; every call to the supplier Actor is capped per call, at its own price, and maxTotalChargeUsd caps this Actor's own fee.

How to use it in 3 steps

  1. Click Try for free and fill in Instagram usernames (instagramUsernames).
  2. Optional: adjust the other fields; every one has a description and a sensible default.
  3. Click Start and download the results as JSON, CSV or Excel, or read them from the API.

Use cases

  • Influencer vetting
  • Reporting

Use it from code (API)

Every Apify Actor is an API. Start a run and read the results with one call.

Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("om_kh/instagram-tiktok-profile-scraper").call(run_input={"instagramUsernames": ["nike", "natgeo"]})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('om_kh/instagram-tiktok-profile-scraper').call({
"instagramUsernames": [
"nike",
"natgeo"
]
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

One HTTP call (cURL) — runs the Actor and returns the dataset in the same response:

curl -X POST "https://api.apify.com/v2/acts/om_kh~instagram-tiktok-profile-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"instagramUsernames": ["nike", "natgeo"]}'

Integrations: n8n, Make, Zapier, Google Sheets

  • n8n — the official Apify node, operation Run Actor and get dataset, Actor om_kh/instagram-tiktok-profile-scraper.
  • Make — Apify › Run an Actor, then Apify › Get Dataset Items.
  • Zapier — Apify › Run Actor; map the dataset items into your next step.
  • Google Sheets, webhooks, Slack — add an integration from the Integrations tab of this Actor.
  • Schedules — run it every hour or day from Schedules in Apify Console.

Use it from an AI agent (MCP and x402)

Connect Claude Desktop, Cursor, VS Code or any MCP client to Apify's MCP server at https://mcp.apify.com and add this Actor, om_kh/instagram-tiktok-profile-scraper, as a tool — the agent passes the same JSON as the run input and gets the dataset back.

AI agents that pay with x402 can run it too, without an Apify account: the Actor charges only per result delivered, so an agent pays exactly for what it gets.

FAQ

Is it legal to scrape Instagram and TikTok? This Actor collects only publicly available Instagram and TikTok data and never logs in. You are responsible for how you use it; check Instagram and TikTok's terms and your local law (GDPR, CCPA) if you store personal data, and ask a lawyer if unsure.

Do I need an account, cookies or an API key? No. You only need an Apify account to run it.

What data do I get? Followers, following, posts count, bio and link. Download it as JSON, CSV, Excel, HTML or XML, or read it from the API.

Am I charged when something fails? No. An input that fails is listed with its reason in the run summary and is never charged.

Can I run it on a schedule? Yes. Create a schedule in Apify Console (hourly, daily, weekly) and connect webhooks, Google Sheets, Slack, n8n, Make or Zapier.

Can I use it from Python, JavaScript or an AI agent? Yes: see the code samples above, or connect AI agents through MCP with the social_profile_growth tool.

All input fields

The main fields are described above; these are the others the form accepts:

  • currentProfiles (Current profiles (advanced)) — Bring your own normalized profile records instead of Vigia fetching them.
  • tiktokUsernames (TikTok usernames) — TikTok usernames or profile URLs to track.
  • youtubeUsernames (YouTube channel handles) — YouTube channel handles (without @) or URLs to track.

Your feedback

Did this Actor save you time? A short review on the Reviews tab helps other people find it, and every review is read. Something missing or broken? Open an issue on the Issues tab: it is answered and fixed fast.

More Actors from the same author