Instagram Profile Scraper Lowcost (0.2$/1K 🤑) avatar

Instagram Profile Scraper Lowcost (0.2$/1K 🤑)

Pricing

$0.20 / 1,000 results

Go to Apify Store
Instagram Profile Scraper Lowcost (0.2$/1K 🤑)

Instagram Profile Scraper Lowcost (0.2$/1K 🤑)

Scrape public Instagram profiles without login: followers, following, bio, links, verification, account type and category. $0.20 per 1,000 profiles.

Pricing

$0.20 / 1,000 results

Rating

0.0

(0)

Developer

Samy

Samy

Maintained by Community

Actor stats

1

Bookmarked

598

Total users

1

Monthly active users

4 days ago

Last modified

Share

Instagram Profile Scraper Lowcost

Get the public details of Instagram profiles for $0.20 per 1,000 profiles. Give it usernames or profile URLs, and it returns each profile's name, bio, follower and following counts, links, verified badge, account type and category. You don't need an Instagram account.

What you get

One row per profile, ready to export as JSON, CSV or Excel:

  • The username, the Instagram ID (pk), the name and the bio.
  • The profile picture in high resolution.
  • Follower and following counts.
  • Whether the profile is verified, private, a business or a creator account.
  • The category the profile shows, such as Artist or Brand.
  • The website link and every link in the bio.
  • The number of posts, if you turn on Include the number of posts.
  • The username you asked for, the profile's URL, the entry you typed for it, and when it was scraped.

Private profiles are included too. Instagram still shows their name, bio and counts to logged-out visitors.

How the price compares

Apify's own Instagram Profile Scraper costs $1.60 to $2.60 per 1,000 profiles, depending on your Apify plan. This Actor costs $0.20 per 1,000 profiles. It reads each profile with two light requests, as a logged-out visitor, and nothing else. In our tests, a run of 64 profiles took between 20 and 45 seconds.

You pay only for the profiles you get. A username that does not exist costs nothing.

How to use it

  1. Open the Actor's Input tab.
  2. Paste your profiles, one per line. A line can be natgeo, @natgeo or https://www.instagram.com/natgeo/.
  3. Turn on Include the number of posts if you need media_count.
  4. Click Start.
  5. Open the Output tab when the run finishes, and export the profiles in the format you need.

Repeated profiles are scraped once. Lines that are not an Instagram profile, such as a post URL, are skipped and counted in the run log.

Input

{
"usernames": ["natgeo", "@nike", "https://www.instagram.com/nasa/"],
"includePostCount": false
}
FieldTypeDescription
usernamesarray of stringsRequired. Usernames, @usernames or profile URLs.
includePostCountbooleanOptional, false by default. Also get each public profile's number of posts in media_count. This is a paid add-on, see Pricing.

Output

{
"pk": "528817151",
"username": "nasa",
"full_name": "NASA",
"biography": "Making the seemingly impossible, possible. ✨",
"profile_pic_url": "https://scontent.cdninstagram.com/v/t51.2885-19/29090066_159271188110124...",
"is_verified": true,
"is_private": false,
"account_type": 2,
"follower_count": 104372988,
"following_count": 90,
"media_count": 4969,
"external_url": "https://www.nasa.gov",
"category_name": null,
"scraped_username": "nasa",
"scraped_at": 1792537793,
"profile_url": "https://www.instagram.com/nasa/",
"success": true,
"is_business_account": true,
"is_professional_account": true,
"bio_links": [
{ "title": "NASA.gov Homepage", "url": "https://www.nasa.gov", "link_type": "external" },
{ "title": "MAX POWER", "url": "https://www.nasa.gov/maxpower", "link_type": "external" }
],
"input": "@NASA"
}
FieldDescription
pkThe profile's Instagram ID. It stays the same when the account changes its username.
usernameThe username, without @.
full_nameThe name on the profile. Empty when it shows none.
biographyThe bio. Empty when it has none.
profile_pic_urlThe profile picture in high resolution.
is_verifiedWhether the profile has a verified badge.
is_privateWhether the profile is private.
account_type1 personal, 2 business, 3 creator.
follower_countNumber of followers.
following_countNumber of accounts the profile follows.
media_countNumber of posts when you turn on Include the number of posts and the profile is public. null otherwise.
external_urlThe website link. null when the profile has none.
category_nameThe category the profile shows, such as Artist. null when it shows none.
scraped_usernameThe username you asked for, lower-case and without @, taken from the URL if you gave one.
scraped_atWhen the profile was scraped, in Unix seconds.
profile_urlThe profile's page on Instagram.
successAlways true: every row is a scraped profile.
is_business_accounttrue for a business account (account_type 2).
is_professional_accounttrue for a business or creator account (account_type 2 or 3).
bio_linksThe links in the bio, each with its title, url and link_type.
inputThe line you typed for this profile.

Instagram sent these counts and flags in every profile we checked. If it leaves out a flag for a profile, the row gets the value the previous version gave: false for is_verified and is_private, and 1 (personal) for account_type. If it leaves out follower_count or following_count, the profile gets no row rather than a wrong 0: RUN_SUMMARY lists it as not_scraped, and you are not charged for it.

The dataset's Overview tab shows the picture, name, counts, badges, category, website and bio. Exports always contain every field.

Each run also saves a RUN_SUMMARY record in its key-value store. It lists every profile you asked for with its result: scraped, not_found (the username does not exist, or Instagram hides the account), not_scraped or stopped_at_spending_limit.

Pricing

WhatPrice
Profile$0.20 per 1,000 profiles
Run start$0.005 per run start (per GB of memory; runs use 1 GB by default)
Post count add-on$0.50 per 1,000 profiles

You pay for each profile in your dataset, and for the post count add-on only on the profiles it filled. Profiles that do not exist, hidden accounts and private profiles' post counts cost nothing.

For example, 1,000 profiles without the add-on cost $0.205: $0.20 for the profiles and $0.005 for the run start at 1 GB.

What changed for existing users

This is the same Actor, rebuilt. Your saved tasks, schedules and API calls keep working: the input accepts the same fields, and every row keeps the previous version's 17 fields, under the same names, in the same order and with the same types. One exception: media_count is null unless you ask for it.

  • media_count is now opt-in. The previous version always filled it. Turn on Include the number of posts ("includePostCount": true) to get it back. Without it, media_count is null.
  • category_name is the category the profile shows, such as Artist. The previous version sometimes gave a broader business category instead, such as Government Agencies. That category is no longer available, so many business profiles now have null here.
  • external_url is the link as the profile shows it. It can differ from the previous version by a trailing slash.
  • Private profiles now come as full rows, with is_private: true and their name, bio and counts. The previous version gave them a failure row.
  • scraped_username is the username in lower case, without @, taken from the URL if you gave one. The previous version repeated the line as you typed it; the new input field does that now.
  • Only scraped profiles get a row. The previous version also wrote a row with "success": false and an error for each profile it could not scrape. Usernames that do not exist, accounts Instagram hides and profiles that could not be scraped are now listed in the run log and in RUN_SUMMARY instead, so you are not charged for them. Every row has "success": true. If your integration read the failure rows, read RUN_SUMMARY instead.
  • New fields: is_business_account, is_professional_account, bio_links and input.
  • delayBetweenProfiles, maxRetries and maxConcurrentProfiles are still accepted, so old inputs run unchanged. They no longer do anything: the Actor sets its own pace. The proxy setting is still accepted too. Leave it on automatic.

Limits

  • The Actor gets what Instagram shows a logged-out visitor. It does not get posts, follower lists, stories or highlights.
  • Business email addresses, phone numbers and street addresses are never exported.
  • The post count is only available for public profiles, and some of them may come without it when Instagram does not show it during the run.
  • Instagram's picture links expire about four days after the run. Download the pictures you need before then.
  • Instagram hides some accounts from logged-out visitors, such as deactivated or restricted ones. They are reported as not found, like usernames that do not exist.
  • An old username can now belong to another account. Compare pk to follow an account across renames.

FAQ

Do I need an Instagram account?

No. The Actor never logs in.

Why is media_count empty?

media_count is null when Include the number of posts is off, when the profile is private, or when Instagram did not show that profile's count during the run. The add-on does not support private profiles: Instagram does not show their post count to logged-out visitors. You pay for the add-on only on the profiles where media_count is filled.

Am I charged for usernames that do not exist?

No. They are listed in the run log and in RUN_SUMMARY as not found, and they are not in the dataset.

The run stopped with "Instagram changed how it serves profiles". What now?

Instagram's answers no longer looked the way the Actor expects, so it stopped instead of exporting wrong data. The profiles exported before that stay in your dataset. Try again later, and report it in the Issues tab if it keeps happening.

What if the run is interrupted?

The run saves its progress. When Apify moves or restarts it, it resumes where it stopped, and it never exports or charges a profile twice.

Can I get the posts of these profiles?

Use Instagram Posts Scraper Lowcost, from the same author, for $0.30 per 1,000 posts.

Run it from the API

curl -X POST "https://api.apify.com/v2/acts/sones~instagram-user-scraper-lowcost/run-sync-get-dataset-items" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "usernames": ["natgeo", "nasa"], "includePostCount": true }'

The Actor reads only what Instagram shows anyone who is not logged in. The results can still contain personal data, such as names and bios, even for public profiles. Collect only what you have a legitimate reason to process, follow the rules that apply to you (such as the GDPR in the EU) and Instagram's terms, and ask a lawyer if you are unsure. Read more in Is web scraping legal? on the Apify blog.