Instagram Boolean Search Scraper | Posts & Reels avatar

Instagram Boolean Search Scraper | Posts & Reels

Pricing

from $1.35 / 1,000 matching instagram results

Go to Apify Store
Instagram Boolean Search Scraper | Posts & Reels

Instagram Boolean Search Scraper | Posts & Reels

Search Instagram posts and Reels with Boolean queries using AND, OR, NOT, phrases, keywords, and hashtags. No login or cookies. Filter by date, engagement, and content type, then export structured JSON, CSV, or Excel for brand monitoring, trend analysis, lead generation, and content research.

Pricing

from $1.35 / 1,000 matching instagram results

Rating

3.9

(4)

Developer

Scraping Solutions

Scraping Solutions

Maintained by Community

Actor stats

0

Bookmarked

95

Total users

68

Monthly active users

4 days ago

Last modified

Share

Find public Instagram posts and Reels with one Boolean query instead of repeating many separate searches. The Actor submits each Boolean branch as a combined Instagram query, then saves only candidates whose available text satisfies the complete expression. It combines keyword search, paginated hashtag feeds, phrases, AND, OR, NOT, and parentheses into one clean, deduplicated dataset.

No Instagram login or cookies are required.

[!IMPORTANT] Search pages are billed even when they produce no final match. Every successful Instagram search page costs $0.01. Restrictive expressions and result filters can still produce few results. resultsLimit is a maximum, not a guarantee. Start with Efficient coverage and a small limit before increasing the search depth.

Validate before running: Build and check your expression with the free FlujoDato Boolean Search Validator. It detects syntax problems and previews the Instagram search plan before you consume Actor quota. Abrir en español.

What this Actor solves

Instagram search is useful for simple terms, but research questions are usually more specific:

(#fitness OR "home workout") AND (protein OR nutrition) AND NOT giveaway

This Actor turns that expression into a combined native search for each valid Boolean branch. Instagram supplies candidate discovery and ranking, but the Actor independently requires the complete expression to match the returned text metadata before saving a result. It then applies dates, engagement, and content-type filters.

Use it to:

  • monitor brands, competitors, products, and campaigns;
  • find niche creators and user-generated content;
  • research conversations while excluding noise such as giveaways or job posts;
  • combine several hashtags and phrases in one repeatable workflow;
  • merge keyword and hashtag results so one search method does not hide useful content found by another;
  • export qualified content to CSV, Excel, JSON, Google Sheets, or an API integration.

Quick start

Use a simple hashtag:

{
"searchQuery": "#running",
"resultsLimit": 100
}

Combine keywords and exact phrases:

{
"searchQuery": "(nike OR adidas) AND \"running shoes\" AND NOT giveaway",
"resultsLimit": 200,
"contentType": "posts_and_reels",
"searchCoverage": "efficient"
}

Research recent Reels with engagement filters:

{
"searchQuery": "(#skincare OR \"skin care\") AND (review OR routine) AND NOT sponsored",
"resultsLimit": 300,
"contentType": "reels_only",
"oldestPostDate": "2026-01-01",
"minimumLikes": 100,
"minimumViews": 1000
}

Boolean syntax

SyntaxMeaningExample
ANDEvery condition must matchcoffee AND ecuador
ORAt least one condition must matchnike OR adidas
NOTExclude matching contentfitness AND NOT giveaway
"..."Match an exact phrase"digital marketing"
( ... )Control grouping and precedence(saas OR software) AND b2b
-termShort form of NOT termtravel -giveaway

Operators are case-insensitive and precedence is NOT, then AND, then OR. Parentheses are recommended whenever a query mixes AND and OR. Local text matching ignores accents and uses Unicode-aware word boundaries: IA matches the complete word IA, but not letters inside tía, viaje, or diario. These boundaries apply to every positive term, every NOT exclusion, and exported matchedTerms.

Expressions such as bank NOT jobs are safely normalized to bank AND NOT jobs unless Require explicit Boolean operators is enabled.

Validate your query before running

Open the free FlujoDato Boolean Search Validator to check a query before it consumes Actor quota. A Spanish version is also available.

The validator runs in your browser and helps you:

  • detect unbalanced parentheses, unfinished operators, and invalid expressions;
  • normalize lowercase operators and missing implicit AND operators;
  • see how many search combinations an OR expression creates;
  • preview the Instagram execution plan before starting a paid extraction;
  • test whether a sample caption matches the complete expression.

For example, paste this query into the validator:

(nike OR adidas) AND (#running OR sneakers) AND NOT giveaway

After it is validated, use the same normalized expression as searchQuery:

{
"searchQuery": "(nike OR adidas) AND (#running OR sneakers) AND NOT giveaway",
"resultsLimit": 100,
"contentType": "posts_and_reels",
"searchCoverage": "efficient"
}

The validator is a planning aid; the Actor always validates the query again before making provider requests.

How discovery works

  1. The Actor validates and normalizes the Boolean query before consuming provider requests.
  2. It converts the expression into Boolean branches and creates a combined native query for every branch.
  3. Up to three discovery searches run concurrently.
  4. Candidate posts and Reels from both channels are merged and deduplicated by media ID or shortcode.
  5. The Actor requires the complete Boolean expression, including every AND and NOT condition, to match the candidate's available text.
  6. Date, engagement, and content-type filters are applied.
  7. Matching records are written to the default dataset immediately after every completed page.

Each page produces visible logs for the source, page number, provider request count, received items, matches, saved results, and Boolean rejections. The RUN_PROGRESS record is refreshed after every completed page. If a long run is stopped, previously written dataset rows and their result-event charges remain available.

The Actor rejects queries with no positive discovery term, such as NOT giveaway, and limits Boolean expansion to 32 branches to prevent unexpectedly expensive runs. If a query exceeds the limit, the validation error reports its exact branch count before any provider request or charge. Reduce the combinations of OR groups or split the query into separate runs.

Discovery channels

Keyword post search

Uses Instagram post or Reel search. Positive terms in each Boolean branch are submitted together, such as nike bolsa. Comprehensive coverage also runs individual-term searches as discovery fallbacks, but those candidates must still pass the same complete Boolean expression.

Hashtag post feeds

Uses Instagram's paginated hashtag feed in addition to keyword search. A positive one-word term such as running is also searched as hashtag #running. Exact phrases containing spaces remain keyword searches because they are not valid Instagram hashtags.

Both channels run automatically when they are useful for the selected coverage. Results are merged and deduplicated before the complete Boolean expression and configured filters are applied.

Result matching

Every result uses exact Boolean text validation. For nike AND bolsa, discovery searches the combined query nike bolsa, but a candidate is saved only when both complete words occur in its available text and no NOT condition matches.

Positive conditions are evaluated across the caption, hashtags, creator name, username, location, audio metadata, and accessibility caption returned by the provider. This provides auditable textual evidence but can discard visually or semantically relevant Instagram results. The Actor does not perform OCR or speech transcription, and it does not infer singular/plural variants.

Every output row has matchType: "exact_boolean" and lists the confirmed positive terms in matchedTerms.

Search coverage depth

Efficient

Uses one combined native query per Boolean branch. This is the recommended coverage level for first runs.

To avoid paying for pagination that does not advance the query, each discovery search stops after 5 consecutive pages without a new matching post or Reel. A candidate that is new but fails the Boolean expression, date range, or engagement filters does not reset this counter.

Comprehensive

Adds individual keyword and hashtag searches as fallbacks around the combined branch queries. Choose this when recall matters more than speed and upstream request usage.

Comprehensive coverage allows up to 20 consecutive pages without a new matching item before stopping a discovery search. This wider window favors recall while still protecting the customer from indefinitely repeated or irrelevant provider pages.

Both modes stop immediately when the upstream provider repeats a pagination token.

The Actor enforces one exploration allowance for the entire run, not a separate allowance for every keyword or hashtag. Without date filters, the adaptive phase targets 3.5x resultsLimit unique candidates globally. The initial coverage phase is always allowed to give every planned discovery source its first-page opportunity, so a Boolean query with many positive terms can inspect more than the 3.5x target before adaptive pagination begins. The global paid-page allowance remains the hard cost guardrail. When a date filter is active, the successful-page allowance also controls the expanded candidate capacity, preventing recent posts from ending a historical search prematurely.

Pagination runs in two phases. The coverage phase gives every discovery source a fair initial allocation. The adaptive phase then continues sources that have produced Boolean-qualified candidates, five pages at a time, prioritizing recent and overall yield. Exact Boolean searches also receive a bounded zero-yield probe before a source is considered unproductive: up to three pages per source in Efficient coverage and five in Comprehensive coverage. Candidates rejected only by date or another local result filter still identify a relevant source, so historical searches can continue toward the requested period without treating those pages as irrelevant.

Instagram discovery is not a complete historical index. Comprehensive mode can improve coverage, but neither mode can guarantee every matching Instagram post.

Input

FieldTypeDefaultDescription
searchQuerystringrequiredHashtag, keyword, phrase, or Boolean expression.
resultsLimitinteger100Maximum unique matching results to save.
contentTypestringposts_and_reelsSearch all public content or Reels only.
hashtagFeedTypestringtopUse top or recent hashtag content.
searchCoveragestringefficientEfficient or comprehensive discovery.
oldestPostDatedateemptyInclusive lower date in YYYY-MM-DD, applied after discovery. One-digit month/day values in API input are normalized. Invalid calendar dates are rejected.
newestPostDatedateemptyInclusive upper date in YYYY-MM-DD, applied after discovery. One-digit month/day values in API input are normalized. Invalid calendar dates are rejected.
minimumLikesinteger0Minimum reported likes.
minimumCommentsinteger0Minimum reported comments.
minimumViewsinteger0Minimum reported video plays.
strictBooleanSyntaxbooleanfalseReject missing explicit operators instead of normalizing them.

resultsLimit is a maximum, not a guarantee. Exact Boolean, NOT, date, or engagement filters can legitimately return fewer records or no records at all. Every planned source receives one initial page. The Actor then probes zero-yield sources up to three total pages in Efficient coverage or five in Comprehensive coverage before discarding them. Productive sources can continue under the 3.5-times requested-result scan target. Each successful search page is billed independently of how many candidates ultimately pass those filters.

Date filters do not instruct Instagram to begin at that historical date; they validate candidates after discovery. Setting the same old date in both fields searches for one exact calendar day, but a current Instagram feed may require substantial pagination before reaching it or may never expose it. Date-filtered runs therefore receive a deeper but bounded allowance: up to 0.5 successful pages per requested result in Efficient mode and 1 successful page per requested result in Comprehensive mode, always shared across the full search plan and capped by the run budget. Start with a wider date range and a small resultsLimit, then narrow it after confirming that the target period is discoverable.

Pricing

This Actor uses two pay-per-event charges so strict filters remain sustainable without inflating the price of every saved result:

EventFreeBronzeSilverGold
Saved result$1.55 / 1,000$1.45 / 1,000$1.40 / 1,000$1.35 / 1,000
Successful search page$0.01$0.01$0.01$0.01

A search-page event is charged only after the Instagram data provider returns a valid response. That page is charged even when every candidate on it is rejected by the Boolean expression or another filter. Failed attempts and retries are not charged. A result event is charged only when a matching row is written to the default dataset. Platform usage is included and there is no Actor-start charge.

For example, 1,000 accepted results requiring 34 successful pages cost approximately $1.55 + (34 x $0.01) = $1.89 on the Free tier. Boolean, date, or engagement filters can require more pages because rejected candidates are never billed as results.

An empty result is not necessarily a failed run. For example, if the Actor successfully scans 13 pages but all discovered candidates fail a restrictive expression, the customer pays 13 x $0.01 = $0.13 for search pages and $0 for results. Use the Boolean validator, begin with Efficient coverage, and test 10-50 results before starting a large run.

Before making the first provider request, the Actor compares the combined planned maximum cost of saved-result events and successful search-page events with the run's maxTotalChargeUsd. The normal estimate assumes 20 discovered items per page, a global 3.5x adaptive candidate target, fair first-page coverage for every discovery source, and a 1.8x page safety factor for duplicates and filters. Date-filtered runs use the deeper bounded allowance described above, and that possible page cost is shown in the preflight log before any request. It is an estimate, not a requirement to fund the complete plan. When the available charge is lower, the Actor enters partial mode, streams every affordable result, and stops safely when the Apify charge limit is reached. A run is rejected before provider use only when it cannot afford even one successful search page and one result.

The estimate and allocation strategy are visible in SEARCH_PLAN, RUN_PROGRESS, RUN_SUMMARY, and the log. The planned maximum is not a final quote: stale, empty, exhausted, or repeated feeds usually stop earlier. During execution, the Actor also stops gracefully when another page or result can no longer be charged. Results are streamed after each page, so already delivered rows are charged and retained even if a long run is stopped later.

Hashtag download limit

The upstream provider does not document a fixed total maximum for a hashtag feed. In a controlled pagination test, one hashtag returned 696 unique posts across 25 pages and still supplied a continuation cursor. Pages contained approximately 24-30 posts. Therefore, the practical total depends on the hashtag's available public content, upstream pagination, run time, request quota, filters, and budget. This Actor applies its own explicit maximum of 10,000 saved results per run.

Output fields

Each default-dataset row represents one post or Reel that satisfies the complete Boolean expression and every configured filter.

FieldTypeDescription
querystringOriginal Boolean expression supplied by the user.
normalizedQuerystringValidated and normalized Boolean expression.
matchedTermsarrayPositive terms confirmed in the searchable text.
matchTypestringAlways exact_boolean for saved results.
discoveryTypestringDiscovery channel: keyword or hashtag.
discoveryQuerystringCombined branch or fallback term used for discovery.
postIdstring or nullInstagram media identifier.
shortCodestring or nullShortcode used in the permanent content URL.
urlstring or nullPermanent public Instagram post or Reel URL.
contentTypestringreel, video, carousel, or image.
captionstring or nullPublic caption text.
hashtagsarrayUnique hashtags found in caption or provider metadata.
publishedAtstring or nullPublication timestamp in ISO 8601 format.
likeCountintegerReported likes; zero is preserved.
commentCountintegerReported comments; zero is preserved.
viewCountintegerReported video plays; zero is preserved.
shareCountintegerReported shares; zero is preserved.
usernamestring or nullCreator username.
fullNamestring or nullCreator display name.
userIdstring or nullCreator identifier.
verifiedboolean or nullReported verification status.
profileUrlstring or nullPublic creator profile URL.
thumbnailUrlstring or nullTemporary thumbnail URL available at collection time.
mediaUrlstring or nullTemporary media URL available at collection time.
locationNamestring or nullPublic location label attached to the content.
locationIdstring or nullInstagram location identifier.
latitudenumber or nullPublic latitude when available.
longitudenumber or nullPublic longitude when available.
audioIdstring or nullInstagram audio or music identifier.
audioTitlestring or nullAudio or music title.
audioArtiststring or nullReported artist or original-audio creator.
scrapedAtstringUTC collection timestamp.

Output example

{
"query": "(#fitness OR \"home workout\") AND nutrition AND NOT giveaway",
"normalizedQuery": "(#fitness OR \"home workout\") AND nutrition AND NOT giveaway",
"matchedTerms": ["#fitness", "nutrition"],
"matchType": "exact_boolean",
"discoveryType": "hashtag",
"discoveryQuery": "fitness",
"postId": "1234567890123456789",
"shortCode": "ABC123xyz",
"url": "https://www.instagram.com/reel/ABC123xyz/",
"contentType": "reel",
"caption": "A practical nutrition guide for runners #fitness",
"hashtags": ["#fitness"],
"publishedAt": "2026-08-20T14:30:00Z",
"likeCount": 820,
"commentCount": 41,
"viewCount": 18400,
"shareCount": 63,
"username": "example.creator",
"fullName": "Example Creator",
"profileUrl": "https://www.instagram.com/example.creator/",
"locationName": "Guayaquil",
"locationId": "212999109",
"audioId": "123456789012345",
"audioTitle": "Espresso",
"audioArtist": "Sabrina Carpenter",
"scrapedAt": "2026-08-30T16:00:00Z"
}

The Boolean search plan output explains the normalized expression, branch count, generated discovery searches, and syntax warnings. Live run progress is updated after every completed page, while the run summary provides the final scanned items, duplicates, filter rejections, provider requests, saved results, stale-pagination stops, and repeated-cursor stops.

Use cases

Brand monitoring

Track brand, product, and campaign mentions while excluding promotions, giveaways, or unrelated meanings.

Trend analysis

Combine topics, phrases, and hashtags to study how conversations and formats develop across public posts and Reels.

Content research

Find high-performing niche content with date, likes, comments, and views filters.

Lead generation

Identify public creators and organizations discussing products, markets, or problems relevant to your business.

Campaign analysis

Collect posts connected to campaign names, slogans, branded hashtags, and competitor campaigns.

Influencer discovery

Find creators whose published content matches a precise topic instead of relying only on biography keywords.

Competitive intelligence

Monitor competing products, positioning, launches, and public audience conversations in a repeatable workflow.

Market research

Build structured datasets for content classification, geographic analysis, engagement comparisons, and qualitative review.

Export and integrations

Export the default dataset as JSON, JSONL, CSV, Excel, XML, HTML, or RSS. You can also retrieve results through the Apify API, schedule recurring runs, trigger webhooks, connect datasets to supported integrations, or use the Actor through Apify MCP-compatible workflows.

Run with the Apify API

curl -X POST \
"https://api.apify.com/v2/acts/YOUR_USERNAME~instagram-boolean-search-scraper/runs?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"searchQuery": "(#fitness OR #running) AND nutrition AND NOT giveaway",
"resultsLimit": 100,
"searchCoverage": "efficient"
}'

Reliability and limits

  • Temporary upstream errors and rate limits are retried after 3, 9, and 27 seconds.
  • Only successful provider pages are charged; failed retries are never billed as search pages.
  • Results are deduplicated across every generated discovery search.
  • Only public content available through Instagram discovery can be returned.
  • Deleted, private, restricted, or unavailable content cannot be recovered.
  • Engagement counters and media URLs reflect the values available at collection time.
  • Media URLs can expire; use the permanent Instagram post URL for long-term references.

FAQ

Do I need an Instagram login or cookies?

No. The Actor searches public Instagram content without customer-provided login credentials or cookies.

Which Boolean operators are supported?

Use AND, OR, NOT, parentheses, quoted phrases, keywords, and hashtags. Operators are case-insensitive.

Why are there two charge events?

Instagram search pages create upstream cost even when local Boolean or engagement filters reject every candidate. Search pages and successfully saved matching results are therefore charged separately.

Are failed requests or retries charged as search pages?

No. A search-page event is charged only after the provider returns a valid successful page. Failed attempts and retries are not charged.

How do date filters work?

Dates are checked after discovery. Instagram does not jump directly to a historical date, so old or narrow ranges can require more pages and may still return few results.

How do engagement filters affect results and cost?

Minimum likes, comments, and views are applied after discovery. Stricter filters can reduce saved results while successful search pages remain billable.

Can the Actor return private posts?

No. It returns only public content available through Instagram discovery. Private, deleted, restricted, or unavailable content cannot be recovered.

Why did the run return fewer results than resultsLimit?

resultsLimit is a maximum, not a guarantee. The available public feed, exact Boolean validation, local filters, duplicate removal, search coverage, budget, and pagination limits all affect the final count.

Are duplicates removed?

Yes. Candidates are deduplicated across all generated keyword and hashtag searches using stable media identifiers or shortcodes.

Can I call the Actor through an API or MCP workflow?

Yes. Run it through the Apify API and consume the default dataset programmatically. It can also participate in Apify MCP-compatible workflows.

Does exact Boolean matching understand images or spoken audio?

No. Matching uses the textual metadata returned by the provider. The Actor does not perform OCR, image recognition, or speech transcription.

How should I test an expensive query?

Validate it first, use Efficient coverage, request 10-50 results, and inspect the planned search count and early output before increasing the limit.

Responsible use

Use public data responsibly and comply with applicable laws, privacy requirements, Instagram terms, and Apify policies. Do not use the Actor for harassment, unauthorized profiling, or decisions that produce legal or similarly significant effects about individuals.

Part of the Scraping Solutions Instagram toolkit

Categories

Social Media, Lead Generation, Marketing

Support

Open an issue on the Actor support page. Include the Actor run ID, the input with secrets removed, the expected behavior, and one public example URL when available. Never send account passwords, cookies, or API tokens.