OLX APIolx.ro ↗
Access OLX.ro listings, ad details, and seller phone numbers via 3 endpoints. Filter by city, category, or keyword. Includes price, photos, and location data.
What is the OLX API?
The OLX.ro API gives developers structured access to Romanian classified listings across 3 endpoints. Use search_ads to query listings by keyword, city, or category and receive full ad objects with prices, photos, and location data. get_ad_details returns the complete listing including HTML description and delivery options, while get_seller_phone retrieves direct contact numbers for most private and business sellers.
curl -X GET 'https://api.parse.bot/scraper/5995040b-e07e-4598-ad31-7a3d97b425b7/search_ads?limit=40&query=laptop&offset=0&city_id=39939&category_id=2529' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace olx-ro-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
from parse_apis.olx_romania_scraper_api import OLX, AdNotFound
olx = OLX()
# Search for laptop ads in electronics category in Iasi
for ad_summary in olx.adsummaries.search(query="laptop", category_id=2529, city_id=39939):
print(ad_summary.title, ad_summary.url)
print(ad_summary.location.city.name, ad_summary.location.region.name)
# Get full details for this ad
ad = ad_summary.details()
print(ad.description, ad.protect_phone)
# Retrieve seller phone number
phone_result = ad.phone()
print(phone_result.phones)
break
Search for ads on OLX.ro with optional filters for category and city. Returns up to `limit` ads per call. The response includes a metadata.total_elements count for the total number of matching ads.
| Param | Type | Description |
|---|---|---|
| limit | integer | Number of results to return per page. |
| query | string | Search keyword to filter ads by title and description. |
| city_id | integer | City ID for location filtering (e.g., 39939 for Iasi, 1 for Bucuresti). |
| category_id | integer | Category ID for filtering (e.g., 1211 for goods, 2529 for electronics, 1657 for automotive). |
{
"type": "object",
"fields": {
"items": "array of ad objects containing id, url, title, description, params, user info, location, photos, and category",
"links": "object with self, next, and first pagination URLs",
"metadata": "object with total_elements, visible_total_count, promoted list, and search_id"
},
"sample": {
"data": {
"items": [
{
"id": 304618239,
"url": "https://www.olx.ro/d/oferta/example-IDkC97p.html",
"user": {
"id": 482685347,
"name": "Exxon",
"company_name": ""
},
"title": "Racheta de tenis Dunlop Vibe 100",
"params": [
{
"key": "price",
"name": "Pret",
"type": "price",
"value": {
"label": "350 lei",
"value": 350,
"currency": "RON"
}
}
],
"photos": [
{
"id": 3009043085,
"link": "https://frankfurt.apollo.olxcdn.com:443/v1/files/6f80uacm6c2f3-RO/image",
"width": 2048,
"height": 1536,
"filename": "6f80uacm6c2f3-RO"
}
],
"status": "active",
"business": false,
"category": {
"id": 1624,
"type": "goods"
},
"location": {
"city": {
"id": 36761,
"name": "Onesti"
},
"region": {
"id": 3,
"name": "Bacau"
}
},
"offer_type": "offer",
"created_time": "2026-06-02T21:10:22+03:00",
"protect_phone": true,
"last_refresh_time": "2026-06-08T15:06:32+03:00"
}
],
"links": {
"next": {
"href": "..."
},
"self": {
"href": "..."
}
},
"metadata": {
"search_id": "ABC123",
"total_elements": 1000,
"visible_total_count": 3879483
}
},
"status": "success"
}
}About the OLX API
Search and Filter Listings
search_ads accepts a free-text query, a city_id (e.g. 39939 for Iași, 1 for București), and a category_id (e.g. 2529 for electronics, 1657 for automotive). The response returns an items array of ad objects — each containing id, url, title, description, params (including price and item state), user info, location, photos, and category. The metadata field includes total_elements for the full match count and a promoted list, and links provides next and first URLs for cursor-based pagination.
Full Ad Details
get_ad_details takes a single ad_id (obtainable from search_ads results) and returns the complete ad record. The response includes the full HTML description, all photos, structured params array, offer_type, location with city and region, and user object with seller id, name, and company_name. This endpoint is suited for building detail pages or enriching search results with fields not fully populated in the search response.
Seller Contact Retrieval
get_seller_phone returns the phones array for a given ad_id. It works for the majority of private and business ads on OLX.ro. Ads with protect_phone enabled by the seller will return an empty phones array — this is a per-listing seller setting, not a platform-wide restriction. The optional ad_url input can be passed alongside ad_id to improve resolution accuracy for edge cases.
The OLX API is a managed, monitored endpoint for olx.ro — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when olx.ro changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official olx.ro API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Aggregate Romanian real estate or automotive listings filtered by city and category for price comparison tools
- Monitor classifieds in a specific category to alert on new listings matching a keyword
- Build a lead generation tool for B2B buyers by extracting seller phone numbers from relevant ads
- Track price trends for used electronics or vehicles across multiple OLX.ro categories over time
- Enrich CRM records with seller contact info and listing details from OLX.ro ad IDs
- Power a local marketplace aggregator that consolidates OLX.ro results with other Romanian listing sources
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does OLX.ro have an official developer API?+
How does pagination work in search_ads?+
search_ads response includes a links object with self, next, and first URLs, and a metadata.total_elements field indicating the total number of matching ads. Use the next link across successive calls to walk through full result sets. The limit parameter controls how many items are returned per call.Will get_seller_phone always return a phone number?+
protect_phone option on individual listings, which causes the phones array to be empty for those ads. The endpoint works correctly for most private and business listings where this option is not set.Does the API cover OLX sites in other countries besides Romania?+
search_ads, get_ad_details, and get_seller_phone — are scoped to olx.ro. OLX operates localized platforms in Poland, Bulgaria, Ukraine, and other markets. You can fork this API on Parse and revise it to target a different OLX country domain.Can I retrieve a seller's full profile or all listings by a specific seller?+
get_ad_details endpoint returns the seller's id, name, and company_name for a given ad, but there is no dedicated seller-profile or seller-listings endpoint. You can fork this API on Parse and revise it to add a seller profile endpoint using the user ID returned in ad responses.