Brave Search Scraper avatar

Brave Search Scraper

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Brave Search Scraper

Brave Search Scraper

Scrape Brave Search results in bulk with organic rankings, sponsored results, pagination, country and Safe Search controls, target-domain tracking, and structured datasets. HTTP-only, fast, and built for SEO research and SERP monitoring.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

SearchShark Tools

SearchShark Tools

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

15 hours ago

Last modified

Categories

Share

🦁 Brave Search Scraper

Brave Search Scraper lets you extract structured organic and sponsored search results from Brave Search for SEO research, SERP monitoring, competitor analysis, and automation.

Collect real observed search rankings, titles, URLs, domains, descriptions, publication dates, ads, sitelinks, and more β€” without manually checking Brave Search.

  • 🎯 Track organic rankings: preserve the observed organic position for every search result
  • πŸ“Š Analyze competitors: see which domains and pages rank for your target searches
  • πŸ”Ž Research SERPs: collect structured Brave Search results across many queries
  • πŸ“£ Capture sponsored results: extract ads separately without affecting organic rankings
  • 🌐 Track target domains: find the best observed position of specific websites
  • ⚑ Run searches in bulk: process many independent search terms in one Actor run
  • 🧹 Avoid duplicate organic results: URL-based deduplication keeps output cleaner
  • πŸ”Œ Automate workflows: export results through Apify Dataset, API, integrations, or downstream applications

πŸ“¦ What data does Brave Search Scraper extract?

πŸ” Search queryπŸ† Organic rank
πŸ“„ Page numberπŸ“Œ Position on page
🦁 Brave SERP positionπŸ“° Result title
πŸ”— Destination URL🌐 Domain
🧭 Displayed URLπŸ“ Description
πŸ“… Published dateπŸ–Ό Favicon
πŸ–Ό ThumbnailπŸ”— Sitelinks
🧩 Result typeπŸ“£ Sponsored status
πŸ“’ Sponsored positionπŸ†” Advertising metadata
🌎 Country settingπŸ›‘ Safe Search setting
πŸ”Ž Source URLπŸ•’ Scrape timestamp

Missing fields are returned as null. The Actor does not invent information that Brave Search does not expose.


πŸš€ Features

Brave Search Scraper is designed for SEO research, SERP intelligence, competitor monitoring, and structured search-data collection.

  • Bulk search terms: process up to 1,000 queries in one Actor run
  • Up to 100 organic results per search term
  • Organic ranking preservation: results retain their actual observed organic position
  • Sponsored result extraction: ads are collected separately from organic results
  • Sponsored results do not affect organic rank
  • Automatic pagination: continue through Brave result pages until the requested limit is reached
  • Country controls: apply a two-letter country setting such as us, gb, ca, or au
  • Safe Search controls: choose off, moderate, or strict
  • Target-domain tracking: monitor up to 100 domains in each run
  • Per-query URL deduplication: duplicate organic destination URLs are not returned repeatedly
  • Structured supplemental datasets: target-domain and search-run summaries are generated automatically
  • Retry handling: temporary request failures are retried automatically
  • Partial failure protection: one failed query does not discard successful queries
  • HTTP-only architecture: normal searches do not require browser automation
  • API-friendly output: structured results are easy to consume from other applications

⬇️ Input

You can configure Brave Search Scraper directly from the Apify Console or send the input programmatically through the Apify API.


πŸ”Ž Search terms

Add one or more searches you want to run on Brave Search.

Example:

plumber los angeles
dentist los angeles
hvac contractor los angeles

Each search term is processed independently.

You can provide:

Minimum: 1 search term
Maximum: 1,000 search terms
Maximum length per term: 512 characters

For example:

best crm software
emergency plumber chicago
seo agency new york
site:example.com marketing

Brave search operators can be included directly in the search term when supported by Brave Search.


Set the maximum number of unique organic results to collect for each search term.

Minimum: 1
Default: 100
Maximum: 100

For example:

Search terms:
plumber los angeles
dentist los angeles
Maximum results per search:
100

can return up to:

100 organic results for plumber los angeles
+
100 organic results for dentist los angeles
=
200 organic results

Sponsored rows may also be included in the default Dataset, so the total Dataset row count can be higher than the requested organic-result maximum.

The requested number is a maximum, not a guarantee.

If Brave stops exposing new organic results before the requested limit is reached, the Actor stops naturally.


🌎 Country

Choose the country context applied to Brave Search.

Use a lowercase two-letter country code.

Examples:

us
gb
ca
au
de
fr

Default:

us

The country setting is applied to every search term in the run.

Search results can still vary over time because search-engine ranking is dynamic.


Choose the Brave Search Safe Search setting.

Available values:

off
moderate
strict

Default:

moderate

This setting is applied to every search in the run.


🎯 Target domains

Optionally provide domains you want to track across the organic search results.

Example:

yelp.com
angi.com
example.com

You can track:

Maximum: 100 target domains

Target-domain tracking does not make additional website requests.

It only analyzes the organic Brave results already collected.

Subdomain matching

A subdomain can match its parent target domain.

For example:

Target:
example.com
Result:
blog.example.com
Match:
Yes

But similar-looking domains are not treated as the same website.

For example:

roto-rooter.com
rotorooter.com

are considered different domains.


🌐 Proxy configuration

Apify Proxy can be used for network requests.

The Actor uses ordinary HTTP requests and does not require browser automation for normal Brave Search result extraction.


πŸ§ͺ Example input

{
"searchTerms": [
"plumber los angeles",
"dentist los angeles",
"hvac contractor los angeles"
],
"maxResultsPerSearch": 50,
"country": "us",
"safeSearch": "moderate",
"targetDomains": [
"yelp.com",
"angi.com"
],
"proxyConfiguration": {
"useApifyProxy": true
}
}

⬆️ Output

Brave Search Scraper creates three structured datasets:

default
target_domain_summary
search_summary

The main search results are stored in the Actor's default Dataset.

You can access the output through:

Output
Storage
Apify API
Integrations

πŸ“Š Main results Dataset

The default Dataset contains both:

organic
sponsored

search results.


πŸ”Ž Example organic result

{
"query": "plumber los angeles",
"rank": 1,
"page": 1,
"pagePosition": 1,
"braveSerpPosition": 1,
"sponsoredPosition": null,
"title": "Example Plumbing Company",
"url": "https://www.example.com/plumbing",
"displayedUrl": "example.com β€Ί plumbing",
"domain": "example.com",
"description": "Professional plumbing services in Los Angeles...",
"publishedDate": null,
"favicon": "https://example.com/favicon.ico",
"thumbnail": null,
"sitelinks": [
{
"title": "Emergency Plumbing",
"url": "https://www.example.com/emergency"
}
],
"resultType": "organic",
"isSponsored": null,
"adPlacementId": null,
"adCreativeInstanceId": null,
"adCreativeSetId": null,
"adCampaignId": null,
"adAdvertiserId": null,
"country": "us",
"safeSearch": "moderate",
"sourceUrl": "https://search.brave.com/search?q=plumber+los+angeles",
"scrapedAt": "2026-09-08T04:32:09.000Z"
}

The values above are illustrative. Actual search results depend on what Brave Search returns at the time of the run.


πŸ“£ Example sponsored result

Sponsored results are stored in the same default Dataset with:

resultType: sponsored
isSponsored: true
rank: null
pagePosition: null

Example:

{
"query": "plumber los angeles",
"rank": null,
"page": 1,
"pagePosition": null,
"braveSerpPosition": 2,
"sponsoredPosition": 1,
"title": "Example Sponsored Plumbing Result",
"url": "https://www.example-advertiser.com/",
"displayedUrl": "example-advertiser.com",
"domain": "example-advertiser.com",
"description": "Book plumbing service today.",
"publishedDate": null,
"resultType": "sponsored",
"isSponsored": true,
"country": "us",
"safeSearch": "moderate"
}

πŸ† Organic rank

One of the most important fields returned by the Actor is:

rank

This represents:

The observed organic Brave Search position for that query during the scrape.

For example:

Result A β†’ rank 1
Result B β†’ rank 2
Result C β†’ rank 3

Only organic web results increment this rank.

Sponsored results do not consume an organic rank.


🦁 Brave SERP position

The Actor also preserves:

braveSerpPosition

This is Brave's observed mixed SERP position when available.

A Brave results page can contain different elements such as:

Sponsored results
Organic web results
Other search modules

Because these can be mixed together, braveSerpPosition may differ from the organic rank.

For SEO ranking analysis, use:

rank

For the observed mixed Brave SERP position, use:

braveSerpPosition

πŸ“„ Page and page position

Organic results also include:

page
pagePosition

Example:

rank: 39
page: 2
pagePosition: 20

This tells you both the global organic position and where the result appeared on the fetched Brave page.


🧹 Organic URL deduplication

Organic results are deduplicated within each search query using normalized destination URLs.

The Actor normalizes URLs by handling things such as:

Hostname casing
Default ports
URL fragments
Root slash equivalence
Common tracking parameters

Common marketing parameters removed during comparison include:

utm_source
utm_medium
utm_campaign
utm_term
utm_content
gclid
fbclid
msclkid

Meaningful paths and query parameters are preserved.

Ranking is not renumbered after deduplication

Suppose Brave exposes:

Rank 1 β†’ Website A
Rank 2 β†’ Website B
Rank 3 β†’ duplicate of Website A
Rank 4 β†’ Website C

The Actor may return:

Website A β†’ rank 1
Website B β†’ rank 2
Website C β†’ rank 4

It does not rename Website C to rank 3.

This preserves the real observed organic ranking.

That also means a run requesting 100 unique organic results can occasionally have a highest observed rank greater than 100.


🎯 Target-domain summary

When targetDomains are supplied, the Actor creates a separate:

target_domain_summary

Dataset.

Each row contains:

query
targetDomain
bestRank
matchingResults

Example:

{
"query": "plumber los angeles",
"targetDomain": "yelp.com",
"bestRank": 1,
"matchingResults": 3
}

This means yelp.com appeared three times among the collected organic results and its best observed organic rank was 1.

If a domain does not appear:

{
"query": "plumber los angeles",
"targetDomain": "example.com",
"bestRank": null,
"matchingResults": 0
}

Why this is useful

Use the target-domain summary to quickly answer questions such as:

Where does my website rank?
Does a competitor appear?
What is the competitor's best position?
How many pages from that domain appear?

without manually filtering the entire result Dataset.


πŸ“‹ Search summary

The Actor also creates:

search_summary

This provides one summary row for each search term.

Fields include:

query
status
failureStatus
stopReason
resultsCollected
sponsoredResultsCollected
pagesFetched
httpStatus
errorMessage
challengeMarkers
startedAt
finishedAt

Example:

{
"query": "plumber los angeles",
"status": "success",
"failureStatus": null,
"stopReason": "max_results_reached",
"resultsCollected": 20,
"sponsoredResultsCollected": 2,
"pagesFetched": 2,
"httpStatus": 200,
"errorMessage": null,
"challengeMarkers": [],
"startedAt": "2026-09-08T04:32:07.000Z",
"finishedAt": "2026-09-08T04:32:11.000Z"
}

βœ… Search statuses

A query can finish with statuses such as:

success
partial
no_results
rate_limited
blocked
http_error
parse_error
retry_exhausted

This makes it easier to determine whether a search completed normally or encountered a network/search-engine issue.


πŸ“„ Pagination

Brave Search Scraper automatically requests additional search-result pages.

The search can stop when:

  • 🎯 Requested maximum results reached
  • πŸ“­ No organic results are returned
  • πŸ†• No new normalized organic URLs are found
  • πŸ” A previously observed result page repeats
  • ⚠️ Request retries are exhausted
  • πŸ›‘ The defensive page ceiling is reached
  • 🚫 Brave returns a blocking or rate-limit response

The current defensive pagination limit is:

10 pages per search term

πŸ“… Published dates

When Brave exposes a publication date, the Actor attempts to extract it into:

publishedDate

Examples can include:

May 16, 2018
June 10, 2026
September 26, 2024
today
yesterday
3 days ago

When an explicit absolute date is available, it is preferred over a generic relative label when possible.

If Brave does not expose a usable date:

publishedDate: null

⚑ Performance

Brave Search Scraper uses an HTTP-only architecture for normal searches.

Instead of launching a full browser, it processes Brave's server-rendered search-result HTML directly.

This generally provides:

Faster startup
Lower memory usage
Lower compute overhead
Efficient bulk searching

Search terms can run concurrently while the individual pages of each search are processed in sequence.


πŸ›‘ Reliability

The Actor includes defensive handling for temporary request and parsing problems.

It can detect conditions such as:

HTTP 403
HTTP 429
HTTP 5xx errors
Rate-limit pages
Challenge pages
Parser failures
Network failures

Temporary failures can be retried automatically.

The Actor does not attempt to solve or bypass CAPTCHA or challenge systems.

If one query fails during a multi-query run, successful queries can still retain their results.


πŸ”Œ API & integrations

Brave Search Scraper can be used programmatically through the Apify API.

You can connect results to workflows such as:

  • Google Sheets
  • Make
  • Zapier
  • CRMs
  • SEO dashboards
  • Internal APIs
  • Data warehouses
  • Competitive intelligence systems
  • AI agents
  • MCP workflows

The main result rows are stored in the default Dataset, making them easy to consume from another application.


πŸ’‘ Example use cases

🎯 SEO rank tracking

Search:

emergency plumber los angeles

Track:

Your domain
Competitor domains
Best observed ranking
Number of ranking URLs

Use targetDomains to create a ready-made ranking summary.


πŸ“Š Competitor research

Run searches such as:

best crm software
email marketing software
sales automation platform

Analyze:

Which domains rank most often
Which pages hold top positions
Which competitors advertise
What titles and descriptions competitors use

πŸ”Ž SERP research

Collect structured results for many related searches:

seo agency los angeles
seo company los angeles
local seo los angeles
technical seo agency

Use the output to study:

Ranking patterns
Domain visibility
SERP overlap
Competitor coverage
Search intent

Sponsored Brave Search results are captured separately from organic rankings.

Use them to research:

Which advertisers appear
Sponsored landing pages
Ad headlines
Ad descriptions
Advertising visibility

🌎 Country-specific research

Run the same search under different country settings.

Example:

us
gb
ca
au

This can help compare how Brave Search results differ between country contexts.


🎯 Target-domain monitoring

Provide:

example.com
competitor.com
anothercompetitor.com

and let the Actor produce:

Best observed rank
Matching organic results
Per-query domain visibility

⚠️ Current limitations

The current version focuses on reliable Brave web-search result extraction.

It does not currently perform:

Image-search scraping
News-search scraping
Video-search scraping
Local/map-result extraction
Full webpage crawling of every result
Email extraction from ranking websites
Social-profile enrichment
Search-result personalization by user account
CAPTCHA solving
Browser fingerprint spoofing

The Actor does not visit every result website unless a future feature explicitly adds that behavior.


❓ FAQ

How does Brave Search Scraper work?

The Actor sends normal HTTP requests to Brave Search for each supplied query.

It then:

Fetches search-result pages
Parses organic web results
Parses sponsored results
Tracks organic ranking
Normalizes URLs
Removes duplicate organic URLs
Automatically paginates
Tracks requested target domains
Creates structured summary datasets

How many results can I scrape?

The current maximum is:

100 unique organic results per search term

Brave may expose fewer results.

The requested number is therefore a maximum rather than a guarantee.


How many searches can I run at once?

You can provide up to:

1,000 search terms

in a single Actor input.

Each search term is handled as its own search context.


Are sponsored results included?

Yes.

Sponsored results are stored in the default Dataset with:

resultType: sponsored
isSponsored: true

They are kept separate from organic ranking logic.


Do ads affect the organic rank?

No.

Organic rank counts only organic web results.

Sponsored results have:

rank: null
pagePosition: null

and receive their own:

sponsoredPosition

Why do rank numbers sometimes have gaps?

Because rank represents the observed organic Brave Search position before URL deduplication.

If an organic destination URL appears again later, the duplicate can be removed while subsequent rankings remain unchanged.

For example:

Returned row 99
rank 100
Returned row 100
rank 101

can be valid.

The Actor preserves the observed SERP ranking instead of renumbering results.


What is the difference between rank and braveSerpPosition?

Use:

rank

for the organic-only ranking.

Use:

braveSerpPosition

for Brave's observed mixed SERP position when available.

Sponsored or other Brave modules can cause these numbers to differ.


Why are some fields null?

Brave does not expose every field for every search result.

The Actor returns:

null

when a value cannot be extracted confidently.

It does not fabricate missing values.


Can I track my website or competitors?

Yes.

Add domains to:

targetDomains

The target_domain_summary Dataset will report:

bestRank
matchingResults

for every query and target domain.


Does target-domain tracking make extra requests?

No.

Target-domain tracking analyzes the organic search results already collected by the Actor.

It does not separately visit the target website.


Can I use Brave Search Scraper through an API?

Yes.

Every Actor can be started through the Apify API, and its datasets can be consumed programmatically.

This makes the Actor suitable for automated SEO, SERP-monitoring, and competitive-intelligence workflows.


Can I export the results?

Yes.

Apify Dataset results can be exported in supported formats such as:

JSON
CSV
Excel
XML
HTML

Does this Actor require a browser?

Not for the normal search workflow.

Brave Search Scraper uses direct HTTP requests and HTML parsing instead of launching browser automation for standard searches.


Does this Actor require a Brave Search API key?

No Brave Search API key is required for the current scraping workflow.

The Actor works from the public Brave Search result pages rather than the Brave Search API.


Is this Actor affiliated with Brave?

No.

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Brave Software.

Brave and related names or marks belong to their respective owners.


πŸ’΅ Pricing

Brave Search Scraper uses pay-per-event pricing.

The main billable result event is each row written to the Actor's default Dataset.

This means both:

Organic result rows
Sponsored result rows

can count as billable result events.

The current Store pricing is shown directly on the Actor page before a run is started.

Your Apify platform usage is handled according to the pricing shown by Apify for the Actor.


🧭 Recommended workflow

For useful SEO coverage, use distinct search intents and keywords rather than large numbers of nearly identical queries.

Good:

emergency plumber los angeles
commercial plumber los angeles
water heater repair los angeles
drain cleaning los angeles

Potentially repetitive:

plumber los angeles
plumbers los angeles
plumbing los angeles
plumbing company los angeles

Closely related searches can naturally return many of the same websites.


πŸ’¬ Feedback & support

Found a bug or have a feature request?

Use the Actor's Issues tab on Apify.

Useful future additions may include:

More Brave Search verticals
Additional localization controls
Advanced SERP feature extraction
Ranking-history workflows
Expanded advertising analytics
Additional export summaries

πŸš€ Brave Search data without the manual searching

Enter your queries, choose your country and Safe Search settings, optionally track target domains, run the Actor, and receive structured Brave Search data ready for SEO research, SERP monitoring, competitor analysis, APIs, and automation.