Trusted by the best startups startups in the world
Everything you need to power an IP protection platform.
From discovery to monitoring, Olostep provides the APIs and web data needed to build modern brand protection platforms.
-
Structured JSON for your AI pipelines
-
Clean Markdown for LLMs
-
Raw HTML when you need full page fidelity
-
Screenshots for visual evidence and audits
-
Searches
Search marketplaces and e-commerce websites to discover new product listings, sellers, and brand mentions before they reach your enforcement pipeline.
Your SearchNike Air MaxIncludeAmazonAlibabaExcludeeBay
Amazon
eBay
Alibaba
AliExpressStructured Results
https://amazon.comNike Air Max 270Men's running shoes with Air cushioning...
https://alibaba.com/Nike Air Max 270Authentic Nike sneakers with fast shipping... -
Crawls
Crawl marketplace pages at scale, follow product links, and collect clean HTML or Markdown for monitoring, enrichment, and AI workflows.
https://www.nike.com/t/air-max-270....Depth 1Depth 2Depth 3Crawled/ IncludedExcluded by Rules -
Scrapes
Extract product titles, prices, sellers, images, reviews, structured JSON, and screenshots from dynamic marketplace pages through a single API.
Your Requesthttps:/www.amazonExtract product title, seller, price, images, reviews, and screenshotsScrapingBrowsersProxiesCAPTCHAsStructured ResultFormatsHTMLMarkdownTextPDFRaw BytesScreenshotStructured Data{
"title": "Nike Air Max 270",
"price": "$149.99",
"seller": "SneakerHub",
"rating": "4.8",
"brand": "Nike"
} -
Monitors
Track listings over time and detect changes to prices, sellers, availability, or page content without repeatedly crawling the same URLs.
Monitor ConfigurationMonitor Nike Air Max listings on Amazon and alert me when the price, seller, or availability changes.ScheduleEvery 6 hoursAlert DeliveredChange Summary$149 → $139Seller changed toSneakerDealsEmailWebhookSms -
Batches
Process entire marketplaces at scale by running thousands of URLs in parallel with asynchronous jobs and reliable retries.
Input: URLs1,000,000amazon.com/1amazon.com/2amazon.com/3amazon.com/4amazon.com/5amazon.com/6amazon.com/nConcurrent Batch ProcessingBatch 1ProcessingBatch 2ProcessingBatch 3ProcessingBatch nProcessingURLs Processed1,000,000Concurrent Batches128Throughput48,752 /minTotal time20m 14s
Built for Brand Protection Infrastructure
Structured JSON, HTML, Markdown, screenshots, browser automation,
and authenticated access through a single developer-first platform.
Get clean data from any URL
1# pip install olostep
2from olostep import Olostep
3
4client = Olostep(api_key="YOUR_REAL_KEY")
5
6result = client.scrapes.create(
7 url_to_scrape="https://en.wikipedia.org/wiki/Alexander_the_Great",
8 formats=["markdown", "html"],
9)
10
11print(result.markdown_content)
12print(result.html_content)
1// npm i olostep
2import Olostep from 'olostep'
3
4const client = new Olostep({ apiKey: 'YOUR_REAL_KEY' })
5
6const result = await client.scrapes.create({
7 url: 'https://en.wikipedia.org/wiki/Alexander_the_Great',
8 formats: ['markdown', 'html'],
9})
10
11console.log(result.markdown_content)
12console.log(result.html_content)
1curl -s -X POST "https://api.olostep.com/v1/scrapes" \
2 -H "Authorization: Bearer <YOUR_API_KEY>" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "url_to_scrape": "https://en.wikipedia.org/wiki/Alexander_the_Great",
6 "formats": ["markdown", "html"]
7 }'
Crawl all the subpages
1# pip install olostep
2from olostep import Olostep
3
4client = Olostep(api_key="YOUR_REAL_KEY")
5
6crawl = client.crawls.create(
7 start_url="https://olostep.com",
8 max_pages=100,
9 include_urls=["/**"],
10 exclude_urls=["/collections/**"],
11 include_external=False,
12)
13
14print(crawl.id, crawl.status)
15
16# Wait for completion and iterate pages
17for page in crawl.pages():
18 print(page.url)
19 content = page.retrieve(["markdown"])
20 print(content.markdown_content[:200])
1// npm i olostep
2import Olostep from 'olostep'
3
4const client = new Olostep({ apiKey: 'YOUR_REAL_KEY' })
5
6const crawl = await client.crawls.create({
7 url: 'https://olostep.com',
8 maxPages: 100,
9 includeUrls: ['/**'],
10 excludeUrls: ['/collections/**'],
11 includeExternal: false,
12})
13
14console.log(crawl.id, crawl.status)
15
16// Wait for completion and iterate pages
17for await (const page of crawl.pages()) {
18 console.log(page.url)
19 const content = await client.retrieve({ retrieveId: page.retrieve_id, formats: ['markdown'] })
20 console.log(content.markdown_content.slice(0, 200))
21}
1# Start crawl
2curl -s -X POST "https://api.olostep.com/v1/crawls" \
3 -H "Authorization: Bearer <YOUR_API_KEY>" \
4 -H "Content-Type: application/json" \
5 -d '{
6 "start_url": "https://olostep.com",
7 "max_pages": 100,
8 "include_urls": ["/**"],
9 "exclude_urls": ["/collections/**"],
10 "include_external": false
11 }'
12
13# Check status (replace <CRAWL_ID>)
14curl -s "https://api.olostep.com/v1/crawls/<CRAWL_ID>" \
15 -H "Authorization: Bearer <YOUR_API_KEY>"
16
17# Get pages (replace <CRAWL_ID>)
18curl -s "https://api.olostep.com/v1/crawls/<CRAWL_ID>/pages" \
19 -H "Authorization: Bearer <YOUR_API_KEY>"
20
21# Retrieve content (replace <RETRIEVE_ID>)
22curl -s -G "https://api.olostep.com/v1/retrieve" \
23 -H "Authorization: Bearer <YOUR_API_KEY>" \
24 --data-urlencode "retrieve_id=<RETRIEVE_ID>" \
25 --data-urlencode "formats=markdown"
Get all the URLs on a website
1# pip install olostep
2from olostep import Olostep
3
4client = Olostep(api_key="YOUR_REAL_KEY")
5
6sitemap = client.maps.create(
7 url="https://docs.olostep.com",
8 include_urls=["/features/**"],
9 top_n=100,
10)
11
12print(f"Map ID: {sitemap.id}")
13
14# Iterate all URLs (handles pagination automatically)
15for url in sitemap.urls():
16 print(url)
1// npm i olostep
2import Olostep from 'olostep'
3
4const client = new Olostep({ apiKey: 'YOUR_REAL_KEY' })
5
6const map = await client.maps.create({
7 url: 'https://docs.olostep.com',
8 includeUrls: ['/features/**'],
9 topN: 100,
10})
11
12console.log(`Map ID: ${map.id}`)
13
14// Iterate all URLs (handles pagination automatically)
15for await (const url of map.urls()) {
16 console.log(url)
17}
1curl -s -X POST "https://api.olostep.com/v1/maps" \
2 -H "Authorization: Bearer <YOUR_API_KEY>" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "url": "https://docs.olostep.com",
6 "include_urls": ["/features/**"],
7 "top_n": 100
8 }'
Process up to 10k URLs in one batch. Get results in 5-8 mins
1# pip install olostep
2from olostep import Olostep
3
4client = Olostep(api_key="YOUR_REAL_KEY")
5
6batch = client.batches.create(
7 urls=[
8 {"custom_id": "item-1", "url": "https://www.google.com/search?q=stripe&gl=us&hl=en"},
9 {"custom_id": "item-2", "url": "https://www.google.com/search?q=paddle&gl=us&hl=en"},
10 ],
11 parser="@olostep/google-search",
12)
13
14print(batch.id, batch.status)
15
16# Wait and iterate results (auto-waits for completion)
17for item in batch.items():
18 content = item.retrieve(["json"])
19 print(item.url, item.custom_id)
20 print(content.json_content)
1// npm i olostep
2import Olostep from 'olostep'
3
4const client = new Olostep({ apiKey: 'YOUR_REAL_KEY' })
5
6const batch = await client.batches.create([
7 { url: 'https://www.google.com/search?q=stripe&gl=us&hl=en', customId: 'item-1' },
8 { url: 'https://www.google.com/search?q=paddle&gl=us&hl=en', customId: 'item-2' },
9], {
10 parser: '@olostep/google-search',
11})
12
13console.log(batch.id, batch.total_urls)
14
15// Wait and iterate results (auto-waits for completion)
16for await (const item of batch.items()) {
17 const content = await item.retrieve(['json'])
18 console.log(item.url, item.custom_id)
19 console.log(content.json_content)
20}
1curl -s -X POST "https://api.olostep.com/v1/batches" \
2 -H "Authorization: Bearer <YOUR_API_KEY>" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "items": [
6 {"custom_id": "item-1", "url": "https://www.google.com/search?q=stripe&gl=us&hl=en"},
7 {"custom_id": "item-2", "url": "https://www.google.com/search?q=paddle&gl=us&hl=en"}
8 ],
9 "parser": {"id": "@olostep/google-search"}
10 }'
Semantically search the Web
1# pip install olostep
2from olostep import Olostep
3
4client = Olostep(api_key="YOUR_REAL_KEY")
5
6search = client.searches.create("Latest updates with SpaceX")
7
8print(search.id, len(search.links))
1// npm i olostep
2import Olostep from 'olostep'
3
4const client = new Olostep({ apiKey: 'YOUR_REAL_KEY' })
5
6const search = await client.searches.create('Latest updates with SpaceX')
7
8console.log(search.id, search.links.length)
1curl -s -X POST "https://api.olostep.com/v1/searches" \
2 -H "Authorization: Bearer <YOUR_API_KEY>" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "query": "Latest updates with SpaceX"
6 }'
Get answers from the Web
1# pip install olostep
2from olostep import Olostep
3
4client = Olostep(api_key="YOUR_REAL_KEY")
5
6answer = client.answers.create(
7 task="What does Olostep do and what is its core offering?",
8 json_format={"company": "", "what_it_does": "", "core_offering": ""},
9)
10
11print(answer.json_content)
12print(answer.sources)
1// npm i olostep
2import Olostep from 'olostep'
3
4const client = new Olostep({ apiKey: 'YOUR_REAL_KEY' })
5
6const answer = await client.answers.create({
7 task: 'What does Olostep do and what is its core offering?',
8 jsonFormat: { company: '', what_it_does: '', core_offering: '' },
9})
10
11console.log(answer.json_content)
12console.log(answer.sources)
1curl -s -X POST "https://api.olostep.com/v1/answers" \
2 -H "Authorization: Bearer <YOUR_API_KEY>" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "task": "What does Olostep do and what is its core offering?",
6 "json": {"company": "", "what_it_does": "", "core_offering": ""}
7 }'
Monitor pages on a schedule and get change alerts
1import requests
2import json
3
4API_KEY = "<YOUR_API_KEY>"
5API_URL = "https://api.olostep.com/v1"
6
7# Create a monitor
8payload = {
9 "query": "Alert me when Tesla stock price is above $500",
10 "frequency": "every hour",
11 "email": "alerts@example.com"
12}
13
14headers = {
15 "Authorization": f"Bearer {API_KEY}",
16 "Content-Type": "application/json"
17}
18
19response = requests.post(f"{API_URL}/monitors", headers=headers, json=payload)
20monitor = response.json()
21monitor_id = monitor['id']
22
23print(f"Monitor created: {monitor_id}")
24print(f"Status: {monitor['status']}")
25
26# List all monitors
27monitors = requests.get(f"{API_URL}/monitors", headers=headers).json()
28for m in monitors['monitors']:
29 print(f"{m['id']}: {m['url']} ({m['frequency']})")
30
31# Get monitor details
32details = requests.get(f"{API_URL}/monitors/{monitor_id}", headers=headers).json()
33print(json.dumps(details, indent=2))
34
35# Delete a monitor
36requests.delete(f"{API_URL}/monitors/{monitor_id}", headers=headers)
37print(f"Monitor {monitor_id} deleted")
1const API_URL = 'https://api.olostep.com/v1'
2const headers = {
3 'Authorization': 'Bearer <YOUR_API_KEY>',
4 'Content-Type': 'application/json'
5}
6
7// Create a monitor
8const res = await fetch(`${API_URL}/monitors`, {
9 method: 'POST',
10 headers,
11 body: JSON.stringify({
12 query: 'Alert me when Tesla stock price is above $500',
13 frequency: 'every hour',
14 email: 'alerts@example.com'
15 })
16})
17
18const monitor = await res.json()
19console.log(`Monitor created: ${monitor.id}`)
20console.log(`Status: ${monitor.status}`)
21
22// List all monitors
23const monitors = await fetch(`${API_URL}/monitors`, { headers }).then(r => r.json())
24monitors.monitors.forEach(m => console.log(`${m.id}: ${m.url} (${m.frequency})`))
25
26// Get monitor details
27const details = await fetch(`${API_URL}/monitors/${monitor.id}`, { headers }).then(r => r.json())
28console.log(details)
29
30// Delete a monitor
31await fetch(`${API_URL}/monitors/${monitor.id}`, { method: 'DELETE', headers })
32console.log(`Monitor ${monitor.id} deleted`)
1# Create a monitor
2curl -s -X POST "https://api.olostep.com/v1/monitors" \
3 -H "Authorization: Bearer <YOUR_API_KEY>" \
4 -H "Content-Type: application/json" \
5 -d '{
6 "query": "Track changes in product pricing and stock information",
7 "url": "https://example.com/products/widget-pro",
8 "frequency": "daily",
9 "email": "alerts@example.com"
10 }'
11
12# List all monitors
13curl -s "https://api.olostep.com/v1/monitors" \
14 -H "Authorization: Bearer <YOUR_API_KEY>"
15
16# Get monitor details (replace <MONITOR_ID>)
17curl -s "https://api.olostep.com/v1/monitors/<MONITOR_ID>" \
18 -H "Authorization: Bearer <YOUR_API_KEY>"
19
20# Delete a monitor (replace <MONITOR_ID>)
21curl -s -X DELETE "https://api.olostep.com/v1/monitors/<MONITOR_ID>" \
22 -H "Authorization: Bearer <YOUR_API_KEY>"
Access the websites other scraping tools struggle with.
Access JavaScript-heavy and authenticated websites with reliable browser automation.
Deploy Orbit for secure internal access.
-
JS Heavy Websites
Access JavaScript-rendered marketplaces and storefronts with fully rendered page content and structured data.
-
Account-Gated Websites
Access authenticated marketplaces and internal portals using managed sessions and secure authentication.
-
Reliable Browser Automation
Run browser sessions at scale with automatic retries, anti-bot handling, and reliable page rendering.
Orbit for internal deployments
Run browser automation inside your own environment with secure
access to authenticated websites and internal systems.
Designed to fit into your existing detection pipeline.
. Collect data from marketplaces, enrich your detection models, and feed results into
your existing enforcement and investigation workflows.
-
Marketplace
Continuously monitor marketplaces and e-commerce websites for new listings and seller activity.
Marketplaces
Amazon
eBay
Alibaba
AliExpress
Wallmartmore... -
Olostep API and Orbit
Extract structured data, capture screenshots, and access authenticated websites through Olostep API and Orbit.
Olostep + Orbit
JS RenderingAuthenticationScreenshots -
Your Detection Models
Analyze extracted data to detect infringements and automate brand protection workflows.
Counterfeit ProductUnauthorized SellerLogo MisuseTrademark Match
Pricing that Makes Sense
Most cost-effective web data API on the market
-
Get startedNo credit card required
Trial
$0Includes:- 500 successful requests
- All requests are JS rendered + utilizing residential IP addresses
- Low rate limits
-
Purchase nowCOST/1K $1.800
Starter
$9/ monthEverything in Free, Plus:- 5000 successful requests
- 150 concurrent requests
-
Purchase nowCOST/1K $0.495
Standard
$99/ monthEverything in Starter, Plus:- 200K successful requests
- 500 concurrent requests
-
Purchase nowCOST/1K $0.399
Scale
$399/ monthEverything in Standard, Plus:- 1 Million successful requests
- AI-powered Browser Automations
Top-ups
Have spiky usage or don't like subscriptions?
You can buy credit packs. They are valid for 6 months.
10k credits
250k credits
2M credits
Enterprise
Trusted by Amazing Teams Building the Future of AI
-
Michelle JuliaCo-founder & CEO AuriumOlostep is the best!!! We automated entire data pipelines with just a prompt
-
Richard HeCo-founder & CEO OpenmartOlostep has become the default Web Layer infrastructure for our company
-
Max Brodeur-UrbasCo-founder & CEO GumloopOlostep works like a charm! And your customer service is exceptional
-
Rob HayesCo-founder MerchkitOlostep lets us turn any website into an API. Great product, great people
-
Brandon CohenCo-founder & CTO CivilGridI highly recommend Olostep, great product!
-
Co-founder & CEO Gedd.itWe verify coupon codes at scale. Love Olostep. It works on any e-commerce
-
Trevor WestCo-founder & CEO PodqiOlostep is the best API to search, extract, and structure data from the Web. Happy to be customers
-
Rida NaveedCo-founder ZecentoWe use /batches combined with parsers and it's magical how we can get structured data at large scale
-
Kieran V.Growth PlotsEventsOlostep allowed us to search and structure events data across the Web
-
Paul MitFounder FoundbaseReliable and cost-effective API for working with data. Congrats on the cool product
Ready to power your brand protection platform?
Power marketplace monitoring, structured data extraction, and browser automation with APIs built for scale.