String vs Apify (2026): when a prebuilt Actor pays
Apify is a marketplace of prebuilt, site-specific scrapers running on a platform that schedules, stores and proxies them. String is a single API that fetches one URL and returns the content. Pick Apify when someone has already built and maintained an Actor for the exact site you need, and you want the parsing done for you. Pick String when your target list is long or changing, and what you need is for arbitrary URLs to come back. In the October 30, 2026 run of the Web Data Frontier Benchmark, String returned verified content on 98.6% of 500 requests across 100 bot-protected sites, first of 17. Apify's general fetch path, its Web Fetch Actor, returned 79.4%, eighth. The two products are also not exclusive: String publishes 30 of its own Actors on Apify Store, and running both is a normal end state.
Last updated November 9, 2026. Benchmark figures come from the October 30, 2026 run of the Web Data Frontier Benchmark: 100 sites, 17 providers, 5 attempts per site. The per-attempt data is the public run file. Apify pricing, billing and platform claims were checked against its pricing page, Web Fetch pricing, Store billing documentation and proxy documentation on November 9, 2026.
Should you pick String or Apify?
Pick Apify when a maintained Actor already exists for your exact site and you want parsed rows, or when you need its scheduling and storage platform. Pick String when your target list is long, changing or an agent's choice, and you need arbitrary URLs to come back. As of the October 30, 2026 benchmark run, String returned 98.6% of requests and Apify's Web Fetch Actor 79.4% (public run file). Running both is normal.
Disclosure, before any numbers
We built the benchmark this page cites, and String ranks first in it. That is a conflict of interest, and the answer to it is that the harness is public and you can run it against your own target list.
This page carries a second conflict that the others do not. String sells 30 Actors on Apify Store. Apify is a distribution channel for us at the same time as it is the subject of this comparison. Two things follow from that, and both cut against the usual shape of a competitor page. We are not neutral about Apify being useful, because we use it. And we cannot claim Apify is a worse product without arguing against our own distribution.
The third disclosure is about what the benchmark measures. The harness sends the same generic "fetch this URL" request to every provider and checks the response for markers. For Apify it calls the Web Fetch Actor, which sends every request through Apify Proxy's Unblocker and escalates to a real browser when a site needs it (adapter source). That is a fair test of Apify as a per-request fetch API. It is not a test of Apify's site-specific Store Actors, which return parsed rows rather than pages and were not measured. So the numbers below compare String with Apify's general fetch path. They say nothing about how good a maintained Google Maps or Instagram Actor is.
What each product actually is
Apify is a platform with a marketplace on top. The platform gives you serverless runs, datasets and key-value stores, request queues, scheduling, standby mode, webhooks, an API, SDKs in JavaScript and Python, a CLI, and an MCP server so an agent can call Actors directly. Underneath sit datacenter, residential, Google SERP and Unblocker proxies. Apify also maintains Crawlee, a good open source crawling library that a lot of people use without ever paying Apify anything. The company holds a SOC 2 report.
The marketplace is the part people actually buy. Apify's site lists 115,189 Actors in the Store. An Actor is a container that takes structured input and writes structured output, and the good ones are maintained by developers who track the target site when it changes. If you need Google Maps places, Instagram profiles or LinkedIn jobs, someone has already solved the parsing, the pagination and the shape of the output, and you can have rows in ten minutes without writing code.
String is one endpoint. You send a URL to the Web Access API and get back the content as Markdown, JSON or raw HTML. There is no marketplace, no scheduler, no dataset store, and no site-specific parser. You supply the orchestration and you supply the parsing. What String does is get the page, including on sites that fight automation.
That is the honest shape of it. Apify is broader in almost every direction. It has a product surface String does not attempt, and for a large class of jobs the extra surface is exactly what you want, not overhead you are paying for.
The benchmark: String and Apify on 100 protected sites
The Web Data Frontier Benchmark sends five requests to each of 100 real bot-protected sites, for each of 17 providers, with a 90 second timeout. That is 500 requests per provider, and the full result set is published as JSON. A request counts as a pass only if the response contains content markers specific to that page, so a 200 status carrying a challenge page or an empty shell fails.
| String | Apify (Web Fetch) | |
|---|---|---|
| Success rate | 98.6% (493 of 500) | 79.4% (397 of 500) |
| Rank of 17 | 1st | 8th |
| Latency score | 4.24 s, 1st | 24.87 s, 14th |
| Sites with all 5 attempts returned | 95 of 100 | 65 of 100 |
| Sites with nothing returned | 0 | 12 |
| Failed attempts that came back 2xx with the wrong page | 0 | 28 |
| 50 easier sites | 99.2% | 96.0% |
| 50 hardest sites | 98.0% | 62.8% |
The latency score is not average response time. It refuses to reward a provider that fails fast, because returning nothing quickly is not a service. Full method is in the October 2026 write-up. Every figure in this section comes from the public run file of the October 30, 2026 run.
The easy and hard halves come from ranking the 100 sites by how often all 17 providers together returned them and cutting the list in half. On the easier 50, Apify's Web Fetch was close to the top of the field. On the hardest 50 it dropped 33.2 points, while String dropped 1.2. By anti-bot system, Apify returned 69.0% on the 20 Akamai sites against String's 97.0%, 63.3% on the six AWS WAF sites against 100%, and 85.3% on the 19 DataDome sites against 97.9%. On the three Kasada sites both returned 100%.
The full field, by success rate: String 98.6%, Scrape.do 94.0%, Context.dev 93.0%, Scrapfly 86.8%, ScrapingBee 85.2%, Firecrawl 81.2%, Zyte 79.6%, Apify 79.4%, ScraperAPI 76.4%, Bright Data 75.4%, Decodo 71.2%, Nimble 68.0%, Oxylabs 67.4%, Browserbase 43.0%, ZenRows 41.8%, ScrapingAnt 40.0% and Scrapingdog 27.6%. ZenRows' API closed the connection without a response on its last 43 targets, so its number counts those attempts as failures.
Chart data
| Provider | Success rate | Passed | Latency score |
|---|---|---|---|
| String | 98.6% | 493/500 | 4.24s |
| Scrape.do | 94.0% | 470/500 | 5.08s |
| Context.dev | 93.0% | 465/500 | 10.96s |
| Scrapfly | 86.8% | 434/500 | 19.62s |
| ScrapingBee | 85.2% | 426/500 | 20.30s |
| Firecrawl | 81.2% | 406/500 | 8.87s |
| Zyte | 79.6% | 398/500 | 14.43s |
| Apify | 79.4% | 397/500 | 24.87s |
| ScraperAPI | 76.4% | 382/500 | 15.19s |
| Bright | 75.4% | 377/500 | 27.88s |
| Decodo | 71.2% | 356/500 | 28.29s |
| Nimble | 68.0% | 340/500 | 22.65s |
| Oxylabs | 67.4% | 337/500 | 16.62s |
| Browserbase | 43.0% | 215/500 | 18.01s |
| ZenRows | 41.8% | 209/500 | 21.91s |
| ScrapingAnt | 40.0% | 200/500 | 18.39s |
| Scrapingdog | 27.6% | 138/500 | 31.52s |
Read the Apify number for what it is. It says that when you use Apify the way you would use a scraping API, sending it arbitrary URLs, about one request in five does not come back, and on the hardest sites it is closer to two in five. It does not say a maintained Store Actor fails at that rate on its own site, because no Store Actor was measured. Anyone who quotes this number against Apify's marketplace, including us, is misusing the data.
The prebuilt ceiling: 15 of 100
Here is the number this page owns, and it is computed against our own Actors rather than against Apify's. The counts below come from String's Actor listing on Apify Store, checked November 9, 2026, and the public run file of the October 30, 2026 run.
String publishes 30 Actors on Apify Store, covering job boards, retail, real estate, reviews, public profiles and finance. The benchmark suite has 100 target sites. Those 30 Actors are built for the sites of 15 of the 100 targets: Amazon, Walmart, Home Depot, Etsy, AutoTrader, Zillow, Realtor.com, Indeed, Glassdoor, ZipRecruiter, G2, Capterra, LinkedIn, TikTok and Yahoo Finance. The other 85 have no String Actor at all.
On the 15 sites where a String Actor exists, String's general fetch path returned 5 of 5 on every one of them. On the 85 sites with no Actor, the same general path returned 5 of 5 on 80 of them and averaged 98.4%, with no site returning nothing.
That is the ceiling on any marketplace, ours included. A prebuilt scraper is a per-site asset. Coverage grows one site at a time, by someone deciding a site is worth maintaining. It cannot grow to the shape of a list you make up on a Tuesday. We publish 30 Actors and they reach 15% of a 100 site suite we chose ourselves, which is about as favorable a test as a marketplace could ask for.
The counterpart is the part marketplace critics skip. On those 15 covered sites, the Actor gives you parsed rows. The general fetch gives you the page, and the parsing is your problem. Both paths cover those sites, and they are not the same deliverable.
The right reading is not that prebuilt scrapers are a bad idea. It is that prebuilt coverage and general coverage solve different problems, and a target list of any size will contain both kinds of site.
Where each one breaks
Apify breaks at the edge of the catalogue. When an Actor exists and is maintained, the work is done. When it does not, you either write one or fall back to a general fetch, and the general fetch is the path the benchmark measured at 79.4% on October 30, 2026. Writing one means learning the platform: Actor structure, input schemas, compute unit sizing, storage, queues and proxy groups. Apify runs a free Academy precisely because this is a real project, and it is a different project from the one you thought you were buying. Developers who publish can monetize what they build, which is what keeps the maintained Actors maintained.
Maintenance is the second edge. A site-specific parser is coupled to a site's markup. When the site changes, the Actor breaks, and whether it gets fixed quickly depends on a third party developer's incentives. Apify's Store documentation says an Actor that fails its automated tests is labelled "under maintenance," that a run of it "can fail or return incomplete results," and that an Actor which keeps failing is deprecated. Every Actor has an Issues tab for reporting problems. Actors with real usage tend to get fixed. Actors in the long tail are a bet on one person's attention.
Apify has also finished retiring its rental pricing model. Its migration guide set September 30, 2026 as the deadline and said rental Actors not migrated by then move to pay-per-usage. The Store documentation now lists two models: pay per event, where the developer sets a price per result or other event, and pay per usage, where you pay only the platform resources a run consumes. If you depended on a rental Actor, check what it bills now.
String breaks where structure is the requirement. If you want LinkedIn job rows with clean fields, String hands you a page and you write the extraction. That is not a small amount of work when the site paginates awkwardly or renders through JavaScript, and it is work Apify has already done for the sites it covers. String also has no scheduler, no dataset store and no run history. If you need those, you are building or buying them separately. String's Composer product exists for structured feeds, but the Web Access API is deliberately just fetching.
String did not clear every site on every attempt either. In the October 30, 2026 run file, it returned at least one attempt on all 100 sites, but missed some attempts on five: kroger.com returned 2 of 5, and skyscanner.net, yellowpages.com, marketwatch.com and barrons.com returned 4 of 5. No fetch API in this category is perfect on hard targets, and a page that told you otherwise would be lying.
Cost, honestly
The comparison pages anchor every vendor at the plan nearest $100 a month billed monthly. Apify has no plan near $100. Its ladder steps from Starter at $19 to Scale at $199, so both are named here rather than picking whichever flatters the comparison. Annual billing takes 10% off. The figures below are the monthly ones.
| Apify Starter | Apify Scale | String Growth | |
|---|---|---|---|
| Plan fee | $19 / month | $199 / month | $99 / month |
| What the fee buys | $19 prepaid usage | $199 prepaid usage | $99 of usage |
| Unit | compute unit, 1 GB RAM for 1 hour | same | one successful request |
| Unit price | $0.20 / CU | $0.16 / CU | $0.16 / 1,000 standard fetches |
| Unused balance | expires at cycle end | expires at cycle end | credit rolls over |
| Residential proxy | $8 / GB | $7.50 / GB | in the request rate |
| Per-request unblocker | $1.50 / 1,000 | $1.25 / 1,000 | $0.16 to $3.25 / 1,000 by path |
Sources: Apify pricing, Apify Web Fetch pricing and String pricing, checked November 9, 2026.
Three things in that table matter more than the headline rates. Apify prices below are as of November 9, 2026 and String prices as of October 2026, from the sources above.
The units are not comparable, and no honest table can make them so. Apify meters compute: a compute unit is 1 GB of RAM for one hour. What a job costs depends on how much memory an Actor asks for, how long it runs, which proxy it uses and how many times it retries. Apify's pricing FAQ says cost "depends on the number of retries when a request fails," and its Store documentation says pay-per-usage cost is "quite difficult to estimate" beforehand and recommends a test run to find out. String meters requests, and a blocked request is not billed. Those are different risk shapes. Metered compute bills your experiments; per-request billing where blocks cost nothing does not.
Prepaid balances expire on Apify. Its pricing FAQ states that unused usage credits "are not rolled over to the next billing cycle, and they expire at the end of the billing cycle." String's plan fee goes to your usage balance in full, and unused credit rolls over. For steady volume this is irrelevant. For spiky work it is the difference between paying for what you used and paying for the month you planned.
String's cheapest rate is not the rate you should plan on. The $0.16 per 1,000 figure is a plain HTTP fetch through a standard proxy on the $99 Growth plan. Pages needing a premium proxy bill $0.90 per 1,000, a browser render on a standard proxy bills $0.80, and a browser on a premium proxy bills $3.25. On Starter at $19 a month those four paths are $0.25, $2.40, $1.20 and $4.80. The hard sites in this comparison are exactly the ones that land on the higher paths, so quoting $0.16 against Apify's $1.50 Web Fetch rate would be picking String's best case against Apify's list price. On a protected page that needs a browser and a premium proxy, String's $3.25 per 1,000 is above Apify's Web Fetch at $1.50 on Starter, $1.25 on Scale and $1.00 on Business, which includes Apify's platform costs. Apify's proxy line items are documented per type: residential at $8 per GB on Starter and Google SERP at $2.50 per 1,000 SERPs, with external data transfer at $0.20 per GB on Starter. String's fetch requests bill per request; its Browser WebSocket sessions bill bandwidth at $5 to $10 per GB.
There is no clean winner in that table, and the effective cost depends on your mix of easy and hard pages and on how many requests come back. A rate per 1,000 requests is only half of a cost per page: in the October 30, 2026 run, 79.4% of Apify Web Fetch requests returned the page and 98.6% of String's did (public run file, as of October 2026). Both companies publish enough to work it out for your own list, which is the useful part.
Which one to pick, by job
Pick Apify when the site has a maintained Actor and you want rows, not pages. Google Maps, Instagram, TikTok and the big job boards have Actors with real usage behind them. Buying that is cheaper than writing and maintaining a parser, and it is not close.
Pick Apify when you need the platform, not just the fetch. Scheduling, run history, dataset storage, retries and webhooks are all there and integrated. If you would otherwise build that, the platform fee is buying something real.
Pick String when the target list is long, changing, or yours alone. No marketplace has an Actor for the 400 supplier sites in your category. The 15 of 100 number above is the point: prebuilt coverage runs out, and it runs out early. On the sites it has no Actor for, as of the October 30, 2026 benchmark run, Apify's own general fetch path returned 79.4% against String's 98.6% (public run file).
Pick String when an agent is choosing the URLs. An agent that decides at runtime which page to read cannot pick an Actor from a catalogue first. It needs a general fetch, which is why String ships an MCP server. Apify also ships MCP, and it exposes Actors, which is a different capability rather than a worse one.
Pick String when unpredictable bills are the problem. Per-request billing where blocked requests cost nothing is legible in a way metered compute is not.
Use both when your list has both kinds of site. This is the common answer and it is not a hedge.
Running both
If you are on Apify and adding String, the change is small. You keep every Actor that works and add a fetch path for the sites with no Actor. Nothing migrates.
Concretely: keep your Apify Actors and their schedules; point the uncovered part of your target list at String's /fetch endpoint; keep Apify's storage and orchestration if you already use them, because String does not replace those. String's first 20,000 standard fetches are free with no card, so the uncovered part of your list is testable before anything changes.
One note before any move. Apify sells a per-request fetch of its own: the Web Fetch Actor at $1.50 per 1,000 fetches on Free and Starter, falling to $1.00 on Business (Apify Web Fetch pricing, as of November 9, 2026), and the raw Unblocker proxy at the same rates. If your reason for leaving is "I want a per-request unblocker," you can buy one from Apify without leaving. That is the path the benchmark measured, so test it against your own targets beside String rather than taking either company's word for it. Note also that using Apify's proxies from outside the platform requires a paid plan.
FAQ
Is String better than Apify?
For fetching arbitrary pages from protected sites, yes on the measured numbers: in the October 30, 2026 benchmark String returned verified content on 98.6% of 500 requests across 100 sites, and Apify's Web Fetch Actor returned 79.4%. On the 50 hardest sites the gap was 98.0% against 62.8%. That measures Apify's general fetch path, not its Store Actors. If a maintained Actor exists for your site and you want parsed rows, Apify is very likely the better buy. If your target list is long or changing, String is.
Is Apify worth it?
For the sites it covers well, yes. An Actor with real usage behind it has already solved parsing, pagination and maintenance for that site, and buying that is cheaper than building it. The cost question is different from the value question: Apify meters compute units at $0.20 each on Starter (Apify pricing, as of November 9, 2026), and its own documentation says pay-per-usage cost is "quite difficult to estimate" beforehand. Run a test job at small scale before committing to a plan.
What are the best Apify alternatives?
That depends on what you were using Apify for. If you were using it for prebuilt site-specific scrapers, the alternatives are other marketplaces, not fetch APIs. If you were using it as a way to get pages back, the October 30, 2026 run had String at 98.6%, Context.dev at 93.0%, Scrapfly at 86.8% and Firecrawl at 81.2%, against Apify's Web Fetch at 79.4%. Our fuller write-up is at Apify alternatives.
Is Apify cheaper than building my own scraper?
For a site with a maintained Actor, usually yes, because you are buying someone else's ongoing maintenance rather than a one-off build. The calculation flips when the site has no Actor, because you are then writing one and learning Apify's platform at the same time. It flips again at high volume on easy pages, where metered compute plus proxy and transfer line items can exceed a flat per-request rate. Apify recommends a test run to find your real number, which is the right advice.
How many sites does a scraper marketplace actually cover?
Fewer than the catalogue size suggests, because coverage is per site and your list is not. A concrete measure from our own data: String publishes 30 Actors on Apify Store, and they are built for 15 of the 100 sites in the October 30, 2026 benchmark suite. The other 85 have no String Actor. For those, a general fetch path returned 5 of 5 on 80 of 85 and averaged 98.4% (public run file, October 30, 2026).
Does String bill for blocked or failed requests?
String does not bill blocked requests or errors on its own side, and unused credit rolls over. A site's own error response, such as a 404, is billed, because String got the site's response back to you. Apify meters platform usage, and its pricing FAQ states that run cost "depends on the number of retries when a request fails," and that unused prepaid usage is "not rolled over to the next billing cycle."
Can Apify handle hard anti-bot sites?
Apify sells an Unblocker that it says "automatically bypasses anti-bot and anti-captcha systems using built-in smart routing," and its Web Fetch Actor routes every request through it. In the October 30, 2026 benchmark that path returned 79.4% of requests overall, 62.8% on the 50 hardest sites, 69.0% on Akamai-protected sites and 100% on the three Kasada sites. It returned nothing on 12 of the 100 sites, including booking.com, indeed.com and skyscanner.net.
How do I verify any of this myself?
Run the benchmark. The harness is public and takes a target list, so you can point it at your own sites rather than ours, and the Apify adapter shows exactly how Apify was called. For the Apify side, start a free plan and run the Actor you care about at small scale; the run detail page shows what it cost. For the String side, the first 20,000 standard fetches are free.
Sources
All checked November 9, 2026.
- Apify pricing
- Apify Web Fetch pricing
- Apify Web Fetch Actor
- Apify Store
- Actors in Apify Store, billing models
- Apify proxy documentation
- Apify Unblocker documentation
- Apify usage and resources
- Apify storage
- Apify request queue
- Apify webhooks
- Apify API reference
- Apify JavaScript SDK
- Apify Python SDK
- Apify CLI
- Apify MCP integration
- Apify Trust Center
- Apify proxy product page
- Apify residential proxy docs
- Apify Google SERP proxy docs
- Apify schedules
- Apify standby mode
- Apify Academy
- Monetizing Actors on Apify
- Apify rental to pay-per-event migration guide
- Crawlee
- Web Data Frontier Benchmark harness
- Apify adapter in the benchmark harness
- October 30, 2026 run, full result JSON
- String pricing
- String Web Access API
- Web Data Frontier Benchmark
- October 30, 2026 benchmark write-up
- String Actors on Apify Store
- Apify alternatives