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 using Boolean queries with AND, OR, NOT, phrases, keywords, and hashtags. Filter by date and engagement, deduplicate matches, and export structured JSON, CSV, Excel, or API data. No cookies required.

Pricing

from $1.35 / 1,000 matching instagram results

Rating

1.0

(1)

Developer

Scraping Solutions

Scraping Solutions

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

3

Monthly active users

a day ago

Last modified

Categories

Share

Instagram Boolean Search Scraper | Posts & Hashtags

Find public Instagram posts and Reels with one precise Boolean query instead of repeating many separate searches. The Actor automatically combines keyword post search, paginated hashtag feeds, exact phrases, AND, OR, NOT, and parentheses, then exports one clean, deduplicated dataset ready for research, monitoring, lead discovery, or content analysis.

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 AND, NOT, exact-phrase, date, or engagement filters can reject every candidate, so a run may return few or zero results while still incurring search-page charges. resultsLimit is a maximum, not a guaranteed result count. Start with Efficient coverage and a small limit, inspect the search plan, and broaden the expression if necessary.

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 an executable search plan, discovers candidate content through Instagram, and applies the complete Boolean expression to each post locally. The result is one normalized dataset containing only matching public content.

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 and matching are case-insensitive. Matching also ignores accents, so CORRUPCION matches corrupción. Precedence is NOT, then AND, then OR. Parentheses are recommended whenever a query mixes AND and OR.

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 automatically creates both keyword and hashtag searches from positive terms.
  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 complete expression is evaluated against the caption, hashtags, creator name, username, location, audio title, and artist metadata returned with each post.
  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.

Discovery channels

Keyword post search

Uses Instagram post or Reel search for every selected positive Boolean term. It accepts words, hashtags, and phrases.

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 always run automatically. There is no channel selector for the customer: the Boolean expression is the only search input. Results are merged and deduplicated before the complete expression is applied.

Search coverage depth

Efficient

Uses one strong discovery term from each Boolean branch. This is the recommended default because it reduces provider requests while preserving the full Boolean filter locally.

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

Searches every positive hashtag, keyword, and phrase. 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. It inspects at most 2x resultsLimit unique candidates globally. The balanced page allowance starts from an estimate of 20 candidates per page and applies a 1.8x safety factor for duplicate-heavy or filtered feeds.

Pagination runs in two phases. The coverage phase gives every discovery source a fair initial allocation. The adaptive phase then continues only sources that have already produced matching results, five pages at a time, prioritizing recent and overall match yield. This avoids both extremes: allowing the first terms to monopolize the run or stopping productive historical searches at the same shallow per-source limit.

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.
newestPostDatedateemptyInclusive upper date in YYYY-MM-DD, applied after discovery.
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. Strict Boolean, phrase, date, or engagement filters can legitimately return fewer records or no records at all. The Actor scans up to two times the requested result limit across the entire run to compensate for filtered and duplicate candidates. 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. 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 checks the combined planned maximum cost of saved-result events and successful search-page events against the run's maxTotalChargeUsd. The preflight assumes 20 discovered items per page, a global 2x candidate scan allowance, and a 1.8x page safety factor for duplicates and filters. The resulting page count is enforced as the shared runtime exploration limit. If the available run charge is insufficient, the Actor stops without consuming provider quota, stores RUN_PROGRESS.status as budget_rejected, and reports the required maximum, available amount, and shortfall.

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 example

{
"query": "(#fitness OR \"home workout\") AND nutrition AND NOT giveaway",
"normalizedQuery": "(#fitness OR \"home workout\") AND nutrition AND NOT giveaway",
"matchedTerms": ["#fitness", "nutrition"],
"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.

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.

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.

Support

When reporting an issue, 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.