Similarweb
Pricing
from $0.79 / 1,000 individual websites
Similarweb
SimilarWeb analytics for any website (public data). It's fast and costs little!
Pricing
from $0.79 / 1,000 individual websites
Rating
4.3
(2)
Developer
Canadesk Support
Maintained by CommunityActor stats
8
Bookmarked
237
Total users
23
Monthly active users
12 days
Issues response
3 days ago
Last modified
Categories
Features
Share
Returns SimilarWeb analytics for any website (public data), in bulk.
How it works
- Enter the websites to be analyzed (e.g.,
apify.com), one per line. - Run it! 🎉
What changed in 2.0
- The 10-website limit per run is gone. A run now accepts up to 10,000 websites.
- Websites are looked up in parallel instead of one by one, with no pause between them by default, so large lists finish much faster.
- Temporary failures are retried automatically.
- Each row now also carries
rowTypeandinputIndex. All existing fields are unchanged. - An empty input no longer looks up a default website; it simply does nothing.
If a saved task or integration sets waiting (the old default was 2000 ms), it
still applies before every lookup. Set it to 0 for full speed.
Input
| Field | Default | Description |
|---|---|---|
startUrls | — | Website domains to look up. Maximum 10,000 per run. |
concurrency | 4 | How many websites are looked up at once (1–8). |
waiting | 0 | Optional pause before each lookup, in milliseconds. Leave at 0 for full speed; raise it only if your proxy gets blocked. |
proxy | — | Proxy configuration. Apify Proxy (residential recommended) or your own proxyUrls. |
Output
Every submitted website produces exactly one row, whether the lookup succeeds or
fails. Rows carry inputIndex, so you can line results back up with your input
even though they complete out of order.
A successful row:
{"target": "spotify.com","analytics": {"siteName": "spotify.com","title": "Spotify - Web Player: Music for everyone","description": "Spotify is a digital music service that gives you access to millions of songs.","category": "arts_and_entertainment/music","estimatedMonthlyVisits": { "2025-04-01": 495724819, "2025-05-01": 511881015, "2025-06-01": 493326349 },"trafficSources": { "Direct": 0.7068281326165025, "Search": 0.24645796816078602, "...": "..." },"monthlyVisitsTable": { "headers": ["Date", "..."], "visits": ["Visits", "..."] },"trafficSourcesTable": { "headers": ["Source", "..."], "values": ["Percentage", "..."] },"totalMonthlyVisits": 1500932183,"rawResponse": { "...": "the complete upstream payload" }},"success": true,"timestamp": "2026-09-11T12:00:00.000Z","rowType": "domain","inputIndex": 0}
A failed or no-data row keeps the same shape with analytics: null,
success: false and an error message. Failures are real outcomes (the lookup
was performed), so they count like any other outcome.
Placeholder rows
A bulk run (50 or more submitted entries) includes a minimum of 1,000 outcome units. When such a run finishes with fewer than 1,000 rows, the remainder is filled with marked placeholders so the finalized dataset reflects the minimum.
Limits and behaviour
-
HTTP 403 errors: proxy selection alone cannot fix an outdated request protocol. Use a build containing the November 2026 extension-context repair. Residential routing was verified with that repair; direct access may still be rejected. Check the dataset's
errorfield and the success/failure counts before treating a completed run as successful data retrieval. -
Retries: temporary failures (timeouts, 5xx, 429, 403 and proxy gateway errors 590–599) are retried at most twice, with backoff, honouring
Retry-After. Each retry goes out through a fresh proxy connection. Permanent answers such as "no data" are not retried. -
Blocking: if the upstream blocks persistently, the run slows down and then stops scheduling instead of spending on repeated failures. Entries that were never attempted get no dataset row and are not charged; their count and input positions are in the run log and in the
RUN_SUMMARYrecord. -
Interruption: if a run is stopped, every row already written stays in the dataset. A bulk run's minimum is charged up front, and final placeholder padding does not happen on a forced stop, so a stopped bulk run can end with fewer than 1,000 rows.
-
Resuming: if a run migrates, it continues where it left off without looking anything up twice. If a stopped or crashed run is resurrected, it also continues, but lookups from roughly its last minute may be repeated and appear twice in the dataset. Repeated lookups are never charged twice.
Support
Use a high-quality or custom proxy. Residential proxies give the best success
rate; lower concurrency or raise waiting if you see blocking.
Open a new issue for bugs. Please share your Run URL.
Cheers!