Skip to main content
Enrichments

Instagram Profile Scraper API

post/v1/enrichments/tasks

Authorizations

X-API-Key or Authorizationstringheaderrequired

We recommend sending your Personal API Key in x-api-key. Datablist handles token renewal for you. Optionally, use an access token as Authorization: Bearer <token> if your application manages tokens itself. Send only one credential header.

Authentication options ↗

Extract names, bios, follower counts, websites, and other profile details from Instagram. Choose a scraping mode to include available public contact details or "About this account" data.

Public ID: instagram-profile-scraper. Get the current definition. You can read it without authentication.

Settings​

Use scrapeType to choose what to retrieve:

  • profile (default): profile details, including public email and phone numbers when available.
  • profile_about: profile details plus "About this account" data.
  • about: only "About this account" data, such as home country and date joined.
  • public: a cheaper profile lookup without email or phone details. It can also return the most recent location when available.
scrapeTypestring
  • The private profile includes the public phone_number and public email address if provided by the user. It costs 2 credits if the input is an Instagram Id. 2+1 credits if the input is an URL or an username.
  • The "About this account" data have two outputs: "Home Country" and "Date Joined". "About" data scraping costs 2 credits. 2+1 credits if the input is an URL or an username.
  • The public profile doesn't include phone or email but is cheaper. It costs 1 credit if the input is an username or an URL. 1+1 credits if the input is the Instagram Id.
Allowed values: "profile", "profile_about", "about", "public"

Additional properties are supported.

Inputs​

Give each input an inputId you can use to match its result to your record. Put the Instagram identifier in data.instagramIdentifier.

instagramIdentifier accepts a full URL such as https://www.instagram.com/example.studio/, a username such as example.studio, or a numeric user ID as a string, such as "1234567890". Send IDs as strings.

For follower or following lists, use Instagram Followers/Following.

instagramIdentifierstringrequired

Instagram user URL (https://www.instagram.com/tomhanks/), or username (tomhanks), or Instagram id (1758466516).

Additional properties are supported.

Outputs​

Each result contains your inputId, a status, the data in outputs, and creditsUsed. If the input failed or no profile was found, error explains why; otherwise it is null.

profileUrl contains the resolved Instagram profile URL. Other fields keep their Instagram names, such as instagramUsername, instagramBio, and instagramFollowerCount. Contact details and other optional values depend on the selected mode and the information available for that account.

The schema lists known profile fields. Results can include additional fields, including instagramHomeCountry and instagramDateJoined when requesting "About this account" data. Missing information may be null. Use the result's status and error to interpret the outcome; the legacy instaEnrichmentStatus field is omitted.

instagramFullNamestring

The full name of the user

Enabled when: scrapeType!=about.

instagramBiostring

Instagram user bio.

Enabled when: scrapeType!=about.

instagramFollowerCountnumber

Instagram user follower count.

Enabled when: scrapeType!=about.

instagramFollowingCountnumber

Instagram user following count.

Enabled when: scrapeType!=about.

instagramCategorystring

Instagram user category name.

Enabled when: scrapeType!=about.

instagramWebsitestring

Instagram user external url.

Enabled when: scrapeType!=about.

format: "uri"
instagramEmailstring

Instagram user public email address.

Enabled when: scrapeType!=about,public.

format: "email"
instagramPhonestring

Instagram user phone number, when available.

Enabled when: scrapeType!=about,public.

instagramWhatsAppPhonestring

Instagram WhatsApp phone number, when available.

Enabled when: scrapeType!=about,public.

instagramAccountTypestring

Instagram Account Type. One of: PERSONAL, BUSINESS, CREATOR

Enabled when: scrapeType!=about,public.

instagramPicturestring

Instagram user profile picture.

Enabled when: scrapeType!=about.

format: "uri"
instagramPrivateboolean

Is the Instagram profile private.

Enabled when: scrapeType!=about.

instagramVerifiedboolean

Is the Instagram profile verified.

Enabled when: scrapeType!=about.

instagramIsBusinessboolean

Is the Instagram profile a business profile.

Enabled when: scrapeType!=about.

instagramMediaCountnumber

Number of posts posted

Enabled when: scrapeType!=about.

instagramZipCodestring

Enabled when: scrapeType!=about.

instagramCitystring

Enabled when: scrapeType!=about.

instagramStreetAddressstring

Enabled when: scrapeType!=about.

instagramLastLocationstring

If the user has posts with location information, retrieve the most recent location.

Enabled when: scrapeType==public.

instagramUserIdstring

Instagram internal id

instagramUsernamestring

Instagram username

profileUrlstring

Instagram profile URL

format: "uri"

Additional properties are supported.

Credits and limits​

Cost: Starts at 1 credit per profile

Public profile scraping starts at 1 credit per profile. Standard profile and "About this account" lookups each start at 2 credits; combining both starts at 4 credits. Converting a username or URL to an ID, or resolving an ID for a public lookup, can add a credit. Pricing varies, so creditsPerInput is null. Check each result's creditsUsed and the task's credits.used for actual usage.

Send 1–10,000 inputs per task, within 16 KiB per input and 10 MiB per request. Tasks can run for up to 24 hours; completed, failed, or stopped tasks are kept for 90 days.

You can set maxCredits to stop starting new work after a credit threshold. Work already underway can still exceed it. Enrichment and source tasks share your account balance and task limits. See limits and errors.

Accepted task and results​

The API returns 202 Accepted with a task ID. Save it, then check links.self every few seconds. Once status is completed, failed, or stopped, read links.results. Failed and stopped tasks can still have useful results. See the task reference.

Example results (sample data and credit amounts):

json
{
"taskId": "00000000000040008000000000000001",
"results": [
{
"inputId": "row-1",
"status": "success",
"outputs": {
"profileUrl": "https://www.instagram.com/example.studio/",
"instagramUserId": "1234567890",
"instagramUsername": "example.studio",
"instagramFullName": "Example Studio",
"instagramBio": "Independent design studio.",
"instagramFollowerCount": 12500,
"instagramFollowingCount": 450,
"instagramCategory": "Design",
"instagramWebsite": "https://example.com",
"instagramEmail": "hello@example.com",
"instagramPhone": "+14155550100",
"instagramWhatsAppPhone": "+14155550100",
"instagramAccountType": "BUSINESS",
"instagramPicture": "https://example.com/profile.jpg",
"instagramPrivate": false,
"instagramVerified": false,
"instagramIsBusiness": true,
"instagramMediaCount": 320,
"instagramZipCode": "94105",
"instagramCity": "San Francisco",
"instagramStreetAddress": "123 Example Street"
},
"creditsUsed": "3",
"error": null
}
],
"nextCursor": null
}

If nextCursor is not null, pass it unchanged in the next request to get more results. Pages default to 500 results; limit accepts 1–1,000. A page is at most 128 KiB, so it may contain fewer results than requested.

Last updated on