Instagram Search Scraper avatar

Instagram Search Scraper

Pricing

from $3.49 / 1,000 results

Go to Apify Store
Instagram Search Scraper

Instagram Search Scraper

Search Instagram users, hashtags, and public posts by keyword. Export stable IDs, canonical URLs, engagement metrics, media fields, and typed results.

Pricing

from $3.49 / 1,000 results

Rating

0.0

(0)

Developer

Happy B

Happy B

Maintained by Community

Actor stats

1

Bookmarked

3

Total users

2

Monthly active users

3 days ago

Last modified

Share

What is Instagram Search Scraper?

Instagram Search Scraper finds public Instagram users, hashtags, and posts by keyword and returns clean, typed rows for discovery, research, monitoring, and analytics. Submit up to 50 search terms, choose the result types you need, and export stable IDs, canonical URLs, engagement metrics, media fields, source-query context, and scrape timestamps.

Every row records the query and query position that produced it. User, Hashtag, and Post dataset views expose the same validated records in Apify Console, API responses, JSON, and CSV without undocumented response fields.

Enable any combination of the three supported result types:

  • Users: stable profile ID, username, full name, verification state, profile pictures, and canonical profile URL.
  • Hashtags: stable hashtag ID, normalized name, canonical hashtag URL, and observed media count.
  • Posts: stable post ID, shortcode, canonical post URL, caption, publication time, likes, comments, plays, views, photo or video URLs, dimensions, carousel slides, and author identity.

Post search is paginated up to maxPostsPerQuery. User and hashtag search return the matches made available for that query. Numeric zero is kept as 0; an optional value that was unavailable is returned as null.

Use cases

  • Influencer discovery: search a niche, collect matching accounts, and pass their usernames to Instagram Profile Scraper for full audience and profile details.
  • Hashtag research: compare stable hashtag IDs and media counts across multiple topic phrases.
  • Brand monitoring: collect public posts matching brand, product, campaign, or competitor terms and compare engagement.
  • Content discovery: find photos, videos, and carousels related to a topic, including canonical URLs and publication times.
  • Trend research: schedule repeat searches and compare the public results and engagement made available over time.
  • Dataset enrichment: attach sourceQuery, queryPosition, resultType, and result position to every row for reproducible downstream joins.

Input

ParameterTypeDefaultDescription
searchQueriesstring[]requiredOne to 50 keyword phrases. Blank entries are rejected and case-insensitive duplicates are removed.
searchUsersbooleanfalseReturn matching public accounts.
searchHashtagsbooleanfalseReturn matching hashtags and media counts.
searchPostsbooleantrueReturn paginated public posts.
maxPostsPerQueryinteger50Maximum unique post rows per query when post search is enabled. Range: 1–5,000.

At least one result type must be enabled. The defaults search posts only, which keeps a simple input useful while avoiding extra user or hashtag rows unless requested.

Sample input

{
"searchQueries": [
"space photography",
"climate science"
],
"searchUsers": true,
"searchHashtags": true,
"searchPosts": true,
"maxPostsPerQuery": 25
}

Output

The default dataset uses a closed schema. Operational request fields, authentication values, and pagination state are not included.

Schema-valid user row

{
"sourceQuery": "space photography",
"queryPosition": 1,
"resultType": "user",
"position": 1,
"scrapeTimestamp": "2026-08-30T12:15:00.000Z",
"pk": "528817151",
"username": "nasa",
"fullName": "NASA",
"profileUrl": "https://www.instagram.com/nasa/",
"isVerified": true,
"profilePicUrl": "https://images.example/nasa-profile.jpg",
"hdProfilePicUrl": "https://images.example/nasa-profile-hd.jpg"
}

Schema-valid hashtag row

{
"sourceQuery": "space photography",
"queryPosition": 1,
"resultType": "hashtag",
"position": 1,
"scrapeTimestamp": "2026-08-30T12:15:00.000Z",
"id": "17843701042062919",
"name": "spacephotography",
"hashtagUrl": "https://www.instagram.com/explore/tags/spacephotography/",
"mediaCount": 1250000
}

Schema-valid post row

{
"sourceQuery": "space photography",
"queryPosition": 1,
"resultType": "post",
"position": 1,
"scrapeTimestamp": "2026-08-30T12:15:00.000Z",
"pk": "3712345678901234567",
"code": "DSpaceExample",
"postUrl": "https://www.instagram.com/p/DSpaceExample/",
"mediaType": 2,
"mediaTypeName": "video",
"caption": "Earthrise from orbit.",
"takenAt": 1788092100,
"takenAtIso": "2026-08-30T12:15:00.000Z",
"likeCount": 245000,
"commentCount": 1850,
"playCount": 920000,
"viewCount": 920000,
"imageUrl": "https://images.example/space-cover.jpg",
"videoUrl": "https://media.example/space-video.mp4",
"imageWidth": 1080,
"imageHeight": 1920,
"carouselMedia": [],
"authorPk": "528817151",
"authorUsername": "nasa",
"authorProfileUrl": "https://www.instagram.com/nasa/"
}

Download results as JSON, CSV, Excel, XML, or HTML, or read them through the Apify API. The run key-value store also contains METADATA, which reports COMPLETE, PARTIAL, or FAILED, per-type row totals, query completion counts, spending-limit state, and customer-safe error summaries.

Pricing

You pay once when a run starts and once for each successful user, hashtag, or post row delivered to the default dataset. All three result types have the same price. Empty searches, rejected rows, overlaps, and results that are not stored do not create a result charge.

Apify tierPer resultPer 1,000 results
Free$0.00349$3.49
Bronze$0.00349$3.49
Silver$0.00349$3.49
Gold$0.00349$3.49
Platinum$0.00349$3.49
Diamond$0.00349$3.49

The Actor Start event is $0.001 per run. There is no minimum total charge and no premium add-on event.

ExampleApproximate event cost
10 delivered results$0.0409
50 delivered results$0.2005
1,000 delivered results$3.4910

Use maxPostsPerQuery, the result-type switches, and Apify’s maximum total charge to bound exploratory searches.

Deduplication and positions

Rows are deduplicated deterministically within each source query and result type. If consecutive post pages overlap, the repeated post is not stored or charged again. The same post may legitimately appear once for each different query because sourceQuery is part of the result identity and explains why that row was discovered.

queryPosition is the submitted query’s one-based position. position is the one-based unique-result position for that query and result type. These fields remain stable through page overlap and make CSV exports suitable for ranking and auditing.

Run status and reliability

The Actor saves progress between pages and validates each normalized row before storage. It detects malformed pagination and repeated page states. If a run is interrupted, migrated, or resurrected, it reconciles already stored rows before continuing so a result is not stored or charged twice.

METADATA.status means:

  • COMPLETE: all enabled search operations reached a terminal result and no spending boundary stopped delivery.
  • PARTIAL: some data was delivered, but a spending boundary or retryable failure prevented full delivery.
  • FAILED: no requested data was delivered.

A valid search with no available matches is complete with zero rows. A run never reports success simply because the process exited normally.

API example

Start a search and return its dataset items with Apify’s synchronous endpoint:

curl -X POST \
"https://api.apify.com/v2/acts/happy_b~instagram-search-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"searchQueries": ["outdoor photography", "sustainable travel"],
"searchUsers": true,
"searchHashtags": true,
"searchPosts": true,
"maxPostsPerQuery": 20
}'

For longer searches, start the Actor asynchronously and read items from the run’s default dataset. See the Apify API documentation for JavaScript, Python, and HTTP clients.

Integrations

Connect Apify integrations to Google Drive, Make, Zapier, Slack, webhooks, or your own warehouse. Use sourceQuery to route results and stable string IDs to update existing records instead of creating duplicates.

Limitations

  • Results are limited to information available from public Instagram search surfaces at scrape time.
  • Search ordering and result availability can change between runs.
  • A maximum is a delivery ceiling, not a promise that a query has that many public matches.
  • User search does not include full audience counts or biographies; enrich discovered usernames with Instagram Profile Scraper.
  • Place search, comments, Stories, follower lists, following lists, and private analytics are not supported.
  • Optional engagement and media values can be unavailable and will be null.
  • Media URLs can expire. Download permitted media promptly if durable files are required.

Responsible use

Public search results can still contain personal data. Use them only for a lawful purpose, minimize retention, honor access and deletion obligations, and comply with applicable privacy laws and Instagram’s terms.

Use Instagram Profile Scraper to turn discovered usernames into complete profile rows with exact audience counts, bio links, account classification, and optional public post history.

Support

If a run behaves unexpectedly, open an issue from the Actor page and include the run ID, a secret-free input example, the expected result, and the observed METADATA.status.