Skip to content
Keklik

WorkingInstagram ยท tested Nov 12, 2026

Instagram Profile Scraper

Turn a list of Instagram usernames into each profile's followers, bio, emails and phone numbers in the bio, website and social links, post and video counts, engagement rate and 6 latest posts.

  • 52 data points for every profile
  • Usernames or profile links
  • From $1 per 1,000 profiles
  • No Instagram account or login needed
  • 10 users
  • 148 runs
  • 134.2K rows of data

In short

Instagram Profile Scraper turns a list of usernames or profile links into one row per profile: followers, following, post and video counts, bio, bio links, email in bio, engagement rate and the 6 latest posts with their likes and comments. Also get similar profiles adds the accounts Instagram suggests as similar. It needs no Instagram account.

You enter
Usernames, @handles or profile links
You get
Followers, bio, bio links, email in bio, engagement rate and latest posts
Price
$1 per 1,000 profiles on Apifyโ€™s Free plan, down to $0.70 on Business. Apifyโ€™s platform costs are included.
Formats
CSV, Excel, JSON, Google Sheets, or the API
Runs on
Apify, in your own account. No login to the site needed.

1Sample rows

Real rows from a recent run. The full file has 52 columns.

gymshark, glossier, allbirds, fentybeauty, huelreal output

5 of the profiles found

Full nameFollowersFollowingPostsVerified
Huel519,0261,0312,279Yes
FENTY BEAUTY BY RIHANNA13,360,3931,3957,149Yes
Gymshark8,769,981691,794Yes
Glossier3,121,2843,6176,097Yes
Allbirds510,385352402Yes
Real results from a test search. The full file has 52 columns.Download the sample โ†“

2Use cases

What people use it for.

Vetting influencers

Followers, engagement rate, recent posts and the brands they already do paid partnerships with, for every creator on your shortlist, before you reach out.

Lead lists

Business accounts with their website and the emails and phone numbers in their bio, ready for outreach.

Competitor tracking

The same list run on a schedule, to follow follower growth and posting activity over time.

Mapping a niche

Also get similar profiles adds the accounts Instagram suggests as similar to each profile, so a few seed accounts open up a whole niche.

3How it works

How it works. The same steps as the form on Apify.

1

Paste the profiles

Profilesgymshark, glossier, allbirds, fentybeauty, huel

Usernames, @handles or profile links, one per line.

2

Each profile is read

Followers, bio, emails and phone numbers in the bio, website and social links, post and video counts, engagement rate, and the 6 latest posts with their likes, comments and paid partnerships. Private profiles come without posts.

3

Find similar profiles

Similar profilesStop at 50 profiles

Switch on Also get similar profiles to add the profiles Instagram suggests as similar, up to about 50 for each. Set Max profiles in total to keep the list small.

4

Download your list

As a spreadsheet, in Google Sheets, or into your CRM or influencer tool.

CSVExcelSheetsAPI

4What you get

What you get for each profile. 52 fields in 8 groups.

  • Profile

    Username, Full name, Bio, Profile picture, Verified, Private

  • Followers and activity

    Followers, Following, Posts, Engagement rate, Story highlights, Videos, Story up now, Has reels

  • Contact

    Email, All emails, Phone numbers, Website, Link pages, Social links

  • Bio links and hashtags

    Bio link 1, Bio link 2, Bio link 3, All bio links, Bio hashtags, Post hashtags

  • Latest 6 posts

    Latest post 1, Latest post 2, Latest post 3, Latest post 4, Latest post 5, Latest post 6

  • Similar profiles

    Related profiles, Discovered from, Discovery level

  • Instagram IDs and link

    Profile URL, Instagram ID, Facebook ID

  • Scrape details

    Scraped at, Source

See all 52 columns
ColumnFieldWhat it is

Profile

  • usernameUsernameInstagram username (handle), without the @, in the casing Instagram shows.
  • full_nameFull nameThe name shown on the profile.
  • biographyBioThe bio text, with its emojis and line breaks.
  • profile_pic_urlProfile pictureLink to the profile picture. Instagram image links expire after a few days, so download the picture soon if you need it.
  • is_verifiedVerifiedTrue when the profile has the blue verified badge.
  • is_privatePrivateTrue for a private profile: its counters and bio are filled, its posts are not.

Followers and activity

  • followers_countFollowersNumber of followers.
  • follows_countFollowingNumber of accounts the profile follows.
  • posts_countPostsNumber of posts on the profile. Empty when the profile turned off embedding (about 1 in 100).
  • avg_engagementEngagement rateEngagement rate: the average likes plus comments of the latest posts, divided by followers. Posts whose likes the author hides are left out; empty when every latest post hides them. 0.004538 means 0.45%.
  • highlight_reel_countStory highlightsNumber of story highlights. Empty for about 1 profile in 5, when Instagram leaves it out.
  • videos_countVideosNumber of videos the profile has posted. Empty for private profiles and profiles that turned off embedding.
  • has_public_storyStory up nowTrue when the profile has a story up right now, a sign it is active today.
  • has_clipsHas reelsTrue when the profile has posted reels.

Contact

  • email_addressEmailThe first email address written in the bio (all of them are in emails). Found on about 1 profile in 20.
  • emailsAll emailsEvery email address written in the bio or in a bio link's title, in order. Empty when there is none.
  • phone_numbersPhone numbersPhone numbers written in the bio, as written, and the number behind a WhatsApp button or wa.me bio link (as +<country code><number>). A number counts when it starts with +, follows a phone word or emoji (๐Ÿ“ž, call, WhatsApp, tel) or is written like (555) 123-4567; follower counts, years and dates are left out. Found on about 1 profile in 50.
  • websiteWebsiteThe first bio link to the account's own website: not a social network, a link page like Linktree or a short link like bit.ly. Found on about half of all profiles.
  • link_pagesLink pagesBio links to a page of more links: Linktree, Beacons, Stan Store, lnk.bio and the like, and music links such as lnk.to. Found on about 1 profile in 5.
  • social_linksSocial linksBio links to other platforms, each with network (youtube, tiktok, facebook, x, threads, linkedin, spotify, whatsapp, amazon, etsy and others) and url. Can be a profile, a video or a shop.

Bio links and hashtags

  • external_url_1Bio link 1The first link in the bio: title, url, lynx_url (the same link through Instagram's redirect) and link_type.
  • external_url_2Bio link 2The second link in the bio, like external_url_1.
  • external_url_3Bio link 3The third link in the bio, like external_url_1.
  • all_external_urlsAll bio linksEvery link in the bio, each like external_url_1.
  • bio_hashtagsBio hashtagsHashtags written in the bio, without the #.
  • post_hashtagsPost hashtagsHashtags in the captions of the latest posts, without the # and without repeats.

Latest 6 posts

  • latest_post_1Latest post 1The profile's most recent latest post: id, shortcode, url, type (GraphImage for a photo, GraphVideo for a video, GraphSidecar for a carousel), is_video, caption, likes (empty when the author hides them), likes_hidden, comments, posted_at (Unix time in seconds), display_url (the image), location (a place name), media_count (slides in a carousel), dimensions, is_paid_partnership (marked "Paid partnership"), paid_partners (the brands it names) and coauthors (the post's other authors on a collab, each with username and is_verified). views, tagged_users, audio_info and product_type are always empty: Instagram doesn't show them to logged-out visitors. Empty when the profile has fewer posts, is private or turned off embedding.
  • latest_post_2Latest post 2The profile's 2nd latest post: id, shortcode, url, type (GraphImage for a photo, GraphVideo for a video, GraphSidecar for a carousel), is_video, caption, likes (empty when the author hides them), likes_hidden, comments, posted_at (Unix time in seconds), display_url (the image), location (a place name), media_count (slides in a carousel), dimensions, is_paid_partnership (marked "Paid partnership"), paid_partners (the brands it names) and coauthors (the post's other authors on a collab, each with username and is_verified). views, tagged_users, audio_info and product_type are always empty: Instagram doesn't show them to logged-out visitors. Empty when the profile has fewer posts, is private or turned off embedding.
  • latest_post_3Latest post 3The profile's 3rd latest post: id, shortcode, url, type (GraphImage for a photo, GraphVideo for a video, GraphSidecar for a carousel), is_video, caption, likes (empty when the author hides them), likes_hidden, comments, posted_at (Unix time in seconds), display_url (the image), location (a place name), media_count (slides in a carousel), dimensions, is_paid_partnership (marked "Paid partnership"), paid_partners (the brands it names) and coauthors (the post's other authors on a collab, each with username and is_verified). views, tagged_users, audio_info and product_type are always empty: Instagram doesn't show them to logged-out visitors. Empty when the profile has fewer posts, is private or turned off embedding.
  • latest_post_4Latest post 4The profile's 4th latest post: id, shortcode, url, type (GraphImage for a photo, GraphVideo for a video, GraphSidecar for a carousel), is_video, caption, likes (empty when the author hides them), likes_hidden, comments, posted_at (Unix time in seconds), display_url (the image), location (a place name), media_count (slides in a carousel), dimensions, is_paid_partnership (marked "Paid partnership"), paid_partners (the brands it names) and coauthors (the post's other authors on a collab, each with username and is_verified). views, tagged_users, audio_info and product_type are always empty: Instagram doesn't show them to logged-out visitors. Empty when the profile has fewer posts, is private or turned off embedding.
  • latest_post_5Latest post 5The profile's 5th latest post: id, shortcode, url, type (GraphImage for a photo, GraphVideo for a video, GraphSidecar for a carousel), is_video, caption, likes (empty when the author hides them), likes_hidden, comments, posted_at (Unix time in seconds), display_url (the image), location (a place name), media_count (slides in a carousel), dimensions, is_paid_partnership (marked "Paid partnership"), paid_partners (the brands it names) and coauthors (the post's other authors on a collab, each with username and is_verified). views, tagged_users, audio_info and product_type are always empty: Instagram doesn't show them to logged-out visitors. Empty when the profile has fewer posts, is private or turned off embedding.
  • latest_post_6Latest post 6The profile's 6th latest post: id, shortcode, url, type (GraphImage for a photo, GraphVideo for a video, GraphSidecar for a carousel), is_video, caption, likes (empty when the author hides them), likes_hidden, comments, posted_at (Unix time in seconds), display_url (the image), location (a place name), media_count (slides in a carousel), dimensions, is_paid_partnership (marked "Paid partnership"), paid_partners (the brands it names) and coauthors (the post's other authors on a collab, each with username and is_verified). views, tagged_users, audio_info and product_type are always empty: Instagram doesn't show them to logged-out visitors. Empty when the profile has fewer posts, is private or turned off embedding.

Similar profiles

  • related_profilesRelated profilesProfiles Instagram suggests as similar, up to about 50, each with id, username, full_name, is_verified and profile_pic_url (is_private is always empty). Big accounts usually have them; small ones often have none.
  • discovered_fromDiscovered fromWith Also get similar profiles (Discovery mode) on: the profile from your list this one was suggested for. Empty for the profiles you typed.
  • hop_depthDiscovery level0 for the profiles you typed, 1 for the similar profiles found for them.

Instagram IDs and link

  • profile_urlProfile URLLink to the profile on Instagram.
  • profile_idInstagram IDNumeric Instagram user ID. It stays the same when the username changes.
  • fbidFacebook IDThe account's ID on Meta's Facebook side.

Scrape details

  • scraping_timeScraped atWhen the row was scraped, in UTC (ISO 8601).
  • sourceSourceHow the row was read. Always "logged_out": what Instagram shows visitors who are not logged in.

Other

  • is_business_accountBusiness accountAlways empty: Instagram shows it only to logged-in visitors, and this scraper never logs in. Kept so saved exports and integrations keep the same columns.
  • is_professional_accountProfessional accountAlways empty: Instagram shows it only to logged-in visitors, and this scraper never logs in. Kept so saved exports and integrations keep the same columns.
  • joined_recentlyJoined recentlyAlways empty: Instagram shows it only to logged-in visitors, and this scraper never logs in. Kept so saved exports and integrations keep the same columns.
  • has_channelHas a channelAlways empty: Instagram shows it only to logged-in visitors, and this scraper never logs in. Kept so saved exports and integrations keep the same columns.
  • has_guidesHas guidesAlways empty: Instagram shows it only to logged-in visitors, and this scraper never logs in. Kept so saved exports and integrations keep the same columns.
  • categoryCategoryAlways empty: Instagram shows it only to logged-in visitors, and this scraper never logs in. Kept so saved exports and integrations keep the same columns.
  • business_emailBusiness emailAlways empty: Instagram shows it only to logged-in visitors, and this scraper never logs in. Kept so saved exports and integrations keep the same columns. The email written in the bio is in email_address.
  • business_phone_numberBusiness phoneAlways empty: Instagram shows it only to logged-in visitors, and this scraper never logs in. Kept so saved exports and integrations keep the same columns.
  • business_contact_methodContact methodAlways empty: Instagram shows it only to logged-in visitors, and this scraper never logs in. Kept so saved exports and integrations keep the same columns.
  • business_addressBusiness addressAlways empty: Instagram shows it only to logged-in visitors, and this scraper never logs in. Kept so saved exports and integrations keep the same columns.
  • websitesAll websitesEvery bio link to a website of the account's own, in bio order (website is the first).
  • biography_with_entitiesBio with mentions and hashtagsAlways empty: Instagram shows it only to logged-in visitors, and this scraper never logs in. Kept so saved exports and integrations keep the same columns. The bio text is in biography and its hashtags in bio_hashtags.

5Pricing

Pricing. From $1 per 1,000 profiles, platform costs included.

Run it yourself on Apifypay per result

Your Apify plan

1005001K5K10K50K
Profiles$1.00
Cost$1.00
Run it on Apify
Done for you

Donโ€™t pay for data you donโ€™t need

Tell us the data you need and we deliver just that, cleaned and ready to use.

  • You pay per data point, not for a tool or a subscription
  • No duplicates, no filler, no columns you'll delete
  • Delivered to your sheet or CRM, once or every week
  • Free sample rows before you pay anything
Tell us what you need โ†’
Compare every plan and scraper on the Pricing page โ†’

Good to know

Instagram shows a business account's category, contact email, phone and address only to logged-in visitors, so you get the email from the bio and the links instead: about 6 profiles in 100 have an email in their bio, and 3 in 4 have a link. Similar profiles come mostly with big accounts. Image and video links expire, so download any media soon after the run.

6Questions

Questions.

How do I keep my first run small and cheap?

Paste a handful of profiles, or set ๐Ÿ›‘ Max profiles in total (for example 20): the run stops there, similar profiles included. From November 26, when you turn on Get posts and reels, set ๐Ÿ”ข Max posts and reels per profile (the form suggests 50) or ๐Ÿ“… Posted after, so a big account's thousands of posts don't fill the run.

How do I download everything in one file?

From November 26: when Get posts and reels is on, the run saves one Excel file with a sheet each for Profiles, Posts and Reels, plus Failed profiles when some failed. Open the Output tab, pick Download everything (Excel) in the dropdown at the top, and download it. You can also download each table on its own: click Export, choose Profiles, Posts or Reels under Output, pick a format (Excel, CSV, JSON and more) and click Download. The Export window starts on Profiles, so pick Posts or Reels there when you want those.

What does Retry blocked profiles do?

From November 26: sometimes Instagram won't show a profile to us. Turn on Retry blocked profiles and we try those profiles again through a home internet connection (a residential proxy), which Instagram almost always lets through. You pay an extra $1.50 per 1,000 for only the profiles that needed it; every other profile costs the normal price. Leave it off and blocked profiles are skipped and free, and the run's last message tells you how many there were.

How far back can I get posts?

From November 26, with Get posts and reels: as far back as the profile goes. Posts come newest first, so to reach old dates the scraper has to page past all the newer posts, about 12 a second. For a profile with a few hundred posts that takes seconds; for a profile with tens of thousands, reaching posts from years ago can take a while. Posts passed over on the way are not charged.

Is it legal to scrape Instagram profiles?

This scraper collects only data that Instagram shows publicly to visitors who are not logged in. Profiles can still contain personal data, which laws such as the GDPR and CCPA protect. Make sure you have a lawful reason to collect and use it, and don't scrape private information. If you are unsure, ask a lawyer.

Do I need an Instagram account?

No. You don't need an Instagram account, a login or cookies, and the scraper never uses yours.

Show 8 more questions
Can I scrape private Instagram profiles?

Private profiles are returned with their counters, bio and badges, but without posts or reels, because Instagram does not show those to visitors.

Can I get a business account's email and phone number?

Instagram shows a business account's contact email, phone number, category and address only to logged-in users, so those fields come back empty. What you can get instead: - Emails and phone numbers in the bio (emails, phone_numbers): what the account wrote in its bio, including the number behind a WhatsApp link. Emails are on about 6 profiles in 100, phone numbers on about 2 in 100. - Website (website): about half of all profiles link to their own site, where contact details usually are. Feed those websites to a contact details scraper to collect more emails and phone numbers.

Can I find more profiles like the ones I have?

Yes. Turn on ๐Ÿ‘ฅ Also get similar profiles and the scraper also collects the profiles Instagram suggests as similar to each profile in your list, up to about 50 each. Each one it finds is a result you pay for, so set ๐Ÿ›‘ Max profiles in total to keep the run small. Small profiles often have no suggestions, so fewer are found around them.

Why are some fields empty?

Every row has what Instagram shows visitors who are not logged in (its source field says logged_out). See Always-empty fields under What to know about the data. Private profiles have no posts, and profiles that turned off embedding (about 1 in 100) have no latest posts or post count.

What happens when a run fails?

The run's status message says why, and the log names each input that failed. If a mistake in the input stops the run before anything is scraped, the run ends without results and its status message says what to change. Either way the Actor sends us a short error report, so we can fix the cause even if you never open an issue: the Actor's build, the reason, the counts from the end-of-run summary, whether your Apify plan is free or paid and, for an unexpected error, where in our code it happened. Web addresses and @usernames are blanked out first. The report never includes your input, your account, the pages you scraped or your results. Every run, failed or not, also sends one usage line as it ends, so we can see which options people use, what runs cost us and how well the data is filled: how many of each charged event it used (for example 120 posts) and the price your plan paid for them; the run's platform cost by item and its resources (time, memory, proxy traffic); whether it stopped at your maximum cost or maximum items; how it was started (Console, API, schedule, saved task, and for API runs the kind of tool, such as Make, Zapier or the Apify client, never the tool's full identity); our scraper's own retry, request and timing counts; and for each output field, how many results had it filled (counts only, never the values). That never includes your input, your account, your IP address, the pages you scraped or your results either. If you need help with a run, open an issue on the Issues tab and attach the run, or email support@kekliktech.com with the run's link; the run's log ends with both.

How much does it cost?

$1.00 per 1,000 profiles on Apify's free plan, down to $0.70 on the Business plan. Use the calculator above for your numbers.

Do I need an Apify account?

Yes. The scraper runs in your Apify account and Apify bills you per result. A free Apify account is enough to try it.

Can you run it for us instead?

Yes. We can run it on a schedule, clean up the results and send them to your sheet, CRM or database. Ask for a quote and we reply within one business day.

7Updates

Kept working.

We run a small test search every day and fix the scraper when Instagram changes.

Working25 of 25 days passed ยท launched Oct 13, 2026
  1. Nov 12, 2026

    Fewer profiles lost to proxy hiccups

    When Apify's proxy briefly loses its connection, the request now waits a moment and goes again on a new IP, without using up one of its tries. In our tests this happened to about 1 request in 10 for short spells, and some profiles were skipped as blocked because of it.

  2. Nov 12, 2026

    Every email and phone number in the bio, and bio links sorted

    Rows now have every email address written in the bio (emails) and the phone numbers written in it or behind a WhatsApp link (phone_numbers), not just the first email. Bio links are sorted into the account's own website (website), pages of more links such as Linktree (link_pages) and links to YouTube, TikTok, WhatsApp and other platforms (social_links). In our test of 958 profiles, about half had a website.

  3. Nov 12, 2026

    Paid partnerships and co-authors in the latest posts

    Each latest post now says whether it is marked "Paid partnership" and names the brand, and lists the other accounts on a collab post.

All 15 updates
  1. Nov 12, 2026

    Failed profiles in their own table, and age-restricted profiles named

    Profiles that can't be scraped are listed in a free Failed profiles table in the Output tab, with what you typed, the reason and what it means. Profiles Instagram shows only to logged-in users, such as alcohol brands with an age limit, are now marked restricted instead of not found.

  2. Nov 12, 2026

    Hidden likes no longer count as 0

    When an account hides the likes on a post, Instagram shows visitors 0, and the row used to say 0 likes, which pulled the engagement rate down (an account hiding every post's likes got an engagement rate near 0%). Those posts now have empty likes and a new likes_hidden flag, and the engagement rate leaves them out; it is empty when every latest post hides its likes. In our tests about 1 profile in 5 hides likes on some posts.

  3. Nov 12, 2026

    Easier to use, for people and AI agents

    The form has clearer names, such as Also get similar profiles (Discovery mode) and Max profiles in total, and from November 26 the post dates use a date picker that also takes periods such as "3 months". Every view in the Output tab starts with the username, and bio links are clickable. Every output field now has a plain description and an example value, so AI agents using Apify's MCP server know what each one holds, and a run that reaches the maximum cost you set says so in its status. Saved tasks and API calls keep working as before.

  4. Nov 12, 2026

    Every post and reel, if you want them (from November 26)

    From November 26, a new Get posts and reels option: pick All posts and reels or Reels only, set how many per profile and from which dates, and get them in their own Posts and Reels tables, one row each. A new Download everything (Excel) file has every table as its own sheet.

  5. Nov 12, 2026

    Latest posts and engagement rate are back

    Since November 4, rows had no latest posts and no engagement rate. Every public profile now has its 6 latest posts, with likes and comments, and its engagement rate again, plus its exact post count, video count and whether it has a story up now. The 12 latest long videos, which Instagram no longer shows logged-out visitors, are gone.

  6. Nov 12, 2026

    Retry blocked profiles (from November 26)

    From November 26, a new Retry blocked profiles option for the profiles Instagram refuses to show us: they are tried again through a home internet connection, and only those profiles cost extra. Without it, blocked profiles are skipped and free, and the run says how many there were.

  7. Nov 7, 2026

    Profiles found again

    Since November 4, Instagram has answered "page not found" for every profile asked for the usual way, real or not, so runs came back empty. Profiles are found again, with followers, bio, links and related profiles. A username that really doesn't exist is told apart in seconds and doesn't fail the run.

  8. Oct 18, 2026

    Similar profiles for big accounts

    Discovery mode now finds similar profiles for large brands and public figures too, where Instagram shows logged-out visitors only part of the profile.

  9. Oct 18, 2026

    Fewer failed runs

    A list whose profiles don't exist or can't be seen now finishes cleanly, with the reason, instead of showing an error.

  10. Oct 17, 2026

    Lower price

    $1 per 1,000 profiles, down from $1.50.

  11. Oct 16, 2026

    Pricing set

    $1.50 per 1,000 profiles. Profiles that fail are free.

  12. Oct 13, 2026

    Launched

    Paste Instagram usernames or profile links and get followers, bio, bio links, category, the 12 latest posts, engagement rate and similar profiles. No Instagram account needed.