On November 2, a reseller who had signed up a few days earlier sent 2,430 Vinted item pages through the Ujeebu Scrape API in one night. They stayed on the default proxy, paid about 5 credits a page, and bought a plan the same evening. They did not set up a headless browser, rent proxies or write a parser first.
That night is the build-or-buy question in small. Writing a scraper for one site takes a weekend. Keeping it alive is the real job: layouts change, anti-bot rules tighten, and the scraper that worked on Friday returns empty fields on Monday. This post shows what buying looks like with recipes, with three real calls and their real output, and where building your own is still the better choice.
What a recipe is
A recipe is a ready-made scraper for one page type on one site, applied with one parameter: recipe=. It sets the page settings that work for that site (JavaScript rendering on or off, for example) and the extraction rules that turn the page into named JSON fields. Send an Amazon product URL with recipe=amazon/detail and you get title, price, rating, availability and the rest back.
As of November 6, 2026 the catalogue holds 159 recipes for 127 sites, and 44 of those sites also have a search form. With search you skip the URL: you pass search parameters, the API builds the listing URL from a published definition, fetches it and returns the listing as JSON. The recipes page lists every site with its fields and credits per page, and the recipe docs describe the parameters.
A recipe call costs the same credits as the same page called with the recipe's settings. Most cost 5 credits (JavaScript rendering on the default proxy). Recipes that work without JavaScript, like Craigslist, cost 1.
Three real calls
We ran each call below once, on November 6, 2026, with a real key. The outputs are real and trimmed.
All three go to https://api.ujeebu.com/scrape with your key in the ApiKey header. Two response headers matter: Ujb-Credits is what the call cost, and Ujb-Url is the URL the API built from your search parameters (it also comes back as a top-level url field). The recipe's fields sit under result.
Amazon search: query, sort, page
The Amazon recipe search takes query, an optional sort (relevance, price_low, price_high, rating or newest) and page (1 to 20).
import requests
API = "https://api.ujeebu.com/scrape"
HEADERS = {"ApiKey": "YOUR_API_KEY"}
r = requests.get(API, headers=HEADERS, params={
"recipe": "amazon/search",
"query": "standing desk",
"sort": "price_low",
"page": 2,
})
data = r.json()
print(r.status_code, r.headers["Ujb-Credits"], r.headers["Ujb-Url"])
for p in data["result"]["products"][:2]:
print(p["asin"], p["price"], p["title"][:60])
Output:
200 5 https://www.amazon.com/s?k=standing%20desk&s=price-asc-rank&page=2
B0DFYCT8F9 $27.99 Height and Angle Adjustable Standing Desk,Mobile Standing De
B093FHRZ27 $27.99 Mobile Stand Up Desk, Adjustable Laptop Desk with Wheels Fla
That page held 48 products, each with asin, title, price, rating, reviews, sponsored, image and url. Expect nulls: the first product had no rating yet, so rating and reviews were null.
Zillow search: city and state
The Zillow recipe search takes a US city and a two-letter state.
r = requests.get(API, headers=HEADERS, params={
"recipe": "zillow/search",
"city": "Austin",
"state": "TX",
})
data = r.json()
res = data["result"]
print(r.headers["Ujb-Credits"], data["url"])
print(len(res["listings"]), "listings,", len(res["item_list"]), "in item_list")
print(res["listings"][0])
Output:
5 https://www.zillow.com/austin-tx/
9 listings, 41 in item_list
{'area': '1,385', 'bathrooms': '2', 'bedrooms': '3', 'image': 'https://photos.zillowstatic.com/fp/15232d79b3991884f332d27d3e5a0ea5-p_e.webp', 'price': '$599,000', 'title': '2011 Peoples St #B, Austin, TX 78702', 'url': 'https://www.zillow.com/homedetails/2011-Peoples-St-B-Austin-TX-78702/145658712_zpid/'}
listings holds the cards Zillow renders first, with price, bedrooms, bathrooms and area. item_list holds the names and URLs of about 40 homes from the page's structured data. Zillow search returns one page per city, because Zillow's page 2 is a path the search definition cannot build. You can run the same call in the Playground without writing code.
Craigslist search: city, query, min_price, max_price
The Craigslist recipe search takes the Craigslist site name as city (sfbay, newyork, chicago), a query, and optional min_price and max_price. It runs with js=false, so a call costs 1 credit.
r = requests.get(API, headers=HEADERS, params={
"recipe": "craigslist/search",
"city": "sfbay",
"query": "road bike",
"min_price": 200,
"max_price": 800,
})
ads = r.json()["result"]["ads"]
print(r.headers["Ujb-Credits"], r.headers["Ujb-Url"], len(ads))
if not ads:
print("empty list: look at the page before you trust it")
for ad in ads[:2]:
print(ad["price"], ad["title"][:50], ad["location"])
Output:
1 https://sfbay.craigslist.org/search/sss?query=road%20bike&min_price=200&max_price=800 200
$450 Paul Brown Custom 43cm Road Racing "Santa Rosa" Bike (santa rosa)
Each ad carries url, title, price and location, and one page holds up to 200 ads. The snippet still checks the list length on purpose: an earlier run of this same call on November 6 came back with HTTP 200, the right URL, 1 credit and an empty ads list, and an hour later it returned 200 ads again. A 200 tells you the page loaded, not that the recipe found what you wanted.
When a parameter is wrong
A missing or invalid search parameter, such as a state that is not two letters, gets HTTP 400 with a param field naming it. It is not billed, so fixing your parameters costs nothing.
Try it yourself
Run this on your own pages
Get a free API key and make your first call in minutes. 5,000 free credits for 7 days, no card.
What it costs
Every Ujeebu endpoint draws on one credit pool, and the Ujb-Credits header gives the exact cost of each call. A recipe adds nothing on top of the page call:
| Proxy type | js=false |
js=true |
|---|---|---|
| rotating (default) | 1 | 5 |
| advanced | 5 | 10 |
| premium | 8 | 25 |
| residential | 20 | 30 |
Premium and residential are separate tiers with separate prices. Blocked, timed-out and failed requests are free. The reseller's Vinted run sat on the cheapest rendered row: default proxy, JavaScript on, about 5 credits a page, around 12,000 credits for the night. The Vinted recipe covers item pages and a search by query, sort and price.
When to build your own
Buy when the site has a recipe and the fields you need are in it. Build, or at least customize, in these cases:
- The site has no recipe. Use the Scrape API with
extract_rules: you write the CSS selectors, the API fetches and renders the page and returns your named fields as JSON. You maintain the selectors; we run the browsers and proxies. The site guides show the settings that work on popular sites. - You need fields a recipe does not return, or logic across several page types.
extract_ruleson the same page gives you full control. - The site is hard. Some sites refuse every proxy type, for everyone. Our measured look at hard sites names several. When a hard site matters to your business, the custom scraping service builds, hosts, monitors and fixes the scraper for you and delivers JSON or a scheduled feed. Projects start from $500, with a yes or no and an estimate within one business day.
- Scraping is your product. If extraction is your core business and you have the engineers, owning the stack can make sense. Budget for the upkeep, not the first build.
Honest limits
- Recipes break when sites change. We re-check the recipes every day and fix the ones that break, but there is a window between the change and the fix. A page can also come back empty for one call and full the next, as the Craigslist call above did; check the list length.
- Some sites are blocked for everyone. A recipe cannot get past a site that refuses every proxy type.
- A recipe returns what the page shows. If a site keeps prices behind a login, the recipe will not have them.
- Search covers 44 sites. For the others, find the listing URL yourself and send it with the listing recipe.
A short note on legality
Whether a scraping project is legal depends on what you collect, how you use it and where you operate. Site terms, copyright and data protection law (GDPR when personal data is involved) apply on top of any ruling about access to public pages. Collect public data, keep personal data out unless you have a lawful basis for it, and read Is web scraping legal? before you start.
FAQ
Does a recipe call cost more than a normal Scrape API call?
No. It costs the same credits as the same page with the recipe's settings: 5 for most recipes (JavaScript on the default proxy), 1 for recipes that run without JavaScript, like Craigslist. The Ujb-Credits header shows the cost of every call.
Can I send my own URL instead of search parameters?
Yes. Send url= with the listing URL and the listing recipe, for example recipe=zillow/listing, or a product URL with recipe=amazon/detail. Search is a shortcut for the 44 sites that have one.
What happens when a site changes and a recipe breaks?
We re-check the recipes every day and fix the ones that break. Until the fix, a call can come back with fewer fields or an empty list, so check the result before you use it. Blocked and failed requests are not billed.
Which sites have recipes?
127 sites and 159 recipes as of November 6, 2026, among them Amazon and its country sites, Zillow, Craigslist, Vinted, LinkedIn jobs, YouTube, GitHub, Booking and Airbnb. The full list, with fields and credits, is on the recipes page.
The free trial gives you 5,000 credits for 7 days with no credit card, enough for about 1,000 rendered recipe calls. Start on the recipes page and pick your site.
Try it yourself
Run this on your own pages
Get a free API key and make your first call in minutes. 5,000 free credits for 7 days, no card.