Instagram Profile Scraper Lowcost (0.2$/1K 🤑)
Pricing
$0.20 / 1,000 results
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
Maintained by CommunityActor stats
1
Bookmarked
598
Total users
1
Monthly active users
4 days ago
Last modified
Categories
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
- Open the Actor's Input tab.
- Paste your profiles, one per line. A line can be
natgeo,@natgeoorhttps://www.instagram.com/natgeo/. - Turn on Include the number of posts if you need
media_count. - Click Start.
- 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}
| Field | Type | Description |
|---|---|---|
usernames | array of strings | Required. Usernames, @usernames or profile URLs. |
includePostCount | boolean | Optional, 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"}
| Field | Description |
|---|---|
pk | The profile's Instagram ID. It stays the same when the account changes its username. |
username | The username, without @. |
full_name | The name on the profile. Empty when it shows none. |
biography | The bio. Empty when it has none. |
profile_pic_url | The profile picture in high resolution. |
is_verified | Whether the profile has a verified badge. |
is_private | Whether the profile is private. |
account_type | 1 personal, 2 business, 3 creator. |
follower_count | Number of followers. |
following_count | Number of accounts the profile follows. |
media_count | Number of posts when you turn on Include the number of posts and the profile is public. null otherwise. |
external_url | The website link. null when the profile has none. |
category_name | The category the profile shows, such as Artist. null when it shows none. |
scraped_username | The username you asked for, lower-case and without @, taken from the URL if you gave one. |
scraped_at | When the profile was scraped, in Unix seconds. |
profile_url | The profile's page on Instagram. |
success | Always true: every row is a scraped profile. |
is_business_account | true for a business account (account_type 2). |
is_professional_account | true for a business or creator account (account_type 2 or 3). |
bio_links | The links in the bio, each with its title, url and link_type. |
input | The 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
| What | Price |
|---|---|
| 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_countis 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_countisnull.category_nameis the category the profile shows, such asArtist. The previous version sometimes gave a broader business category instead, such asGovernment Agencies. That category is no longer available, so many business profiles now havenullhere.external_urlis 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: trueand their name, bio and counts. The previous version gave them a failure row. scraped_usernameis 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 newinputfield does that now.- Only scraped profiles get a row. The previous version also wrote a row with
"success": falseand anerrorfor 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 inRUN_SUMMARYinstead, so you are not charged for them. Every row has"success": true. If your integration read the failure rows, readRUN_SUMMARYinstead. - New fields:
is_business_account,is_professional_account,bio_linksandinput. delayBetweenProfiles,maxRetriesandmaxConcurrentProfilesare still accepted, so old inputs run unchanged. They no longer do anything: the Actor sets its own pace. Theproxysetting 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
pkto 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 }'
Is it legal?
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.