How to use it: 3 steps
- Make a free Apify accountApify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
- Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example:
[]in Search links. Each start is one run. - Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.
This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.
What it does
Avito Listings Scraper reads public Avito.ru search results and listing pages and saves clean rows with prices, locations, seller type, photos and optional full details.
Good for
- Track prices of a product or a car in a region.
- Collect homes for sale with Avito's price estimate and the building's listing history.
- Get only the new listings of a saved search each day.
- Read public reviews and price statistics of a product model.
- Find short-term rentals for exact dates and guests.
Who uses it
Resellers
Track prices of a product or a car in a region.
Real estate analysts
Collect homes for sale with Avito's price estimate.
Market researchers
Read public reviews and price numbers of a product model.
Price
Pay per event: you pay for each result the tool saves, plus a small start fee for each run. The price includes Apify platform costs. Apify bills you, not us. Prices below are for the Apify free plan.
| What you pay for | Price | When |
|---|---|---|
| Start fee | $0.003 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. |
| Listing | $0.0036 (from $0.00252 on paid Apify plans) | One saved listing. Duplicates, excluded ads and closed listings are not charged. |
| Source work unit | $0.0003 (from $0.00021 on paid Apify plans) | Work on Avito, charged also when nothing is found. Search page: 12 units. Listing, reviews or valuation read: 2 units. New connection: 1 unit. Protected reply: 8 more units. |
| Listing details | $0.0021 (from $0.00147 on paid Apify plans) | Full details added to one listing when details are turned on. |
| Model review | $0.0005 (from $0.00035 on paid Apify plans) | One saved product model review when reviews are turned on. |
Examples
- One result: about $0.0066.
- 1,000 results: about $3.60.
- Every day 100 results, for 30 days: about $10.89 a month.
Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. That is enough for about 1,300 results.
Prices checked on 8 November 2026. See the current price on Apify.
Questions
Do I need an Avito account or a proxy?
No. You need only an Apify account. The Actor reads public pages.
Does it return phone numbers?
No. Phone numbers and personal emails are not collected.
Why is the price empty?
The listing shows no number as price. The field is null, not zero.
Can I get more than 2,000 rows from one search?
Not from one search. Avito stops showing results after about 31 pages. Add more phrases, regions, categories or price ranges in one run.
How fresh and complete is the data?
Each row shows Avito at the time in fetchedAt. Avito decides what a search shows, so the Actor does not promise every listing.
Is isUnderpriced a market valuation?
No. It compares a price only with rows from the same source page. Avito's own estimates for homes and cars are in marketValuation and carMarketPrice.
Details
Step by step on Apify
- Open the input form. Keep the prefilled
велосипедin Search words or type your own words (box 1 in the picture). - Keep
moskvain Region or paste a region from an Avito link, such assankt-peterburg(box 2). - Keep
10in Maximum listings for a first test (box 3). - Click Start.
- Open the Output tab and check
title,priceandlocation(box 5).
Use cases
| Task | Input | You get | Key fields | Next step |
|---|---|---|---|---|
| Compare prices of a product in a region | query, region, sort | Listing row | title, price, location, url | CSV or Excel export |
| Get new listings from a saved search | searchUrls, onlyNew, stateName | New listing row | itemId, changeType, price, url | Schedule and Slack or Notion summary |
| Watch price changes | searchUrls, trackChanges, stateName | Changed listing row | changeType, price, priceText, postedAt | Schedule, API or webhook |
| Value a home for sale | listingUrls, includeDetails | Detailed listing row | marketValuation, realtyReport, buildingListingHistory | JSON export |
| Study a product model | listingUrls, includeReviews, includeComparables | Listing row with model data | productReviews, modelRating, modelComparables | JSON export or API |
Tips for better results
- One search shows up to about 2,000 listings. Use more phrases, regions or price ranges for more.
- Turn on onlyNew and run it on a schedule to get only new ads.
- The default 300 second timeout fits about 550 to 1,000 search rows. Set a longer timeout for more.
Limits and good to know
- The Actor reads only public pages. It does not return phone numbers or personal emails, and it does not log in
- One search returns up to about 2,000 listings, because Avito stops showing results after about 31 pages. Avito can also start repeating or stop a search after about 500–800 listings. Use several phrases, regions, categories or price ranges for more
- The default timeout of 300 seconds fits about 550–1,000 search rows. Set a longer timeout for more. Rows with details take about 1 second each
- The current version was tested up to 450 search rows in one run. Larger runs were measured on an earlier build at 512 MB: 5,000 rows took about 28 minutes and 20,000 rows about 93 minutes. Treat these numbers as a guide, and start a large job with a smaller run
- Avito can refuse some reads. The Actor retries and then keeps the rows it has, with
SOURCE_BLOCKEDin the summary - Avito can widen a narrow search with other regions and loosely related listings. The Actor checks the price range again, but it keeps Avito's choice of words and region
onlyNewremembers the latest 50,000 delivered IDs
For developers
Sample result
One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.
{
"itemId": "8075689687",
"url": "https://www.avito.ru/moskva/velosipedy/velosiped_gornyy_26_8075689687",
"title": "Велосипед горный 26''",
"price": 7500,
"priceText": "7 500 ₽",
"priceWithoutDiscount": null,
"discountPercent": null,
"currency": "RUB",
"location": "Москва, ул. Лескова, 19Ас2",
"latitude": 55.894085,
"longitude": 37.616457,
"category": "Горные",
"categoryId": 34,
"breadcrumbs": ["Хобби и отдых", "Велосипеды", "Горные"],
"postedAt": "2026-10-31T17:06:46.000Z",
"sellerType": "company",
"sellerRating": 5,
"sellerReviewCount": 442,
"sellerVerified": false,
"imageCount": 5,
"isDeliveryAvailable": false,
"isNegotiable": null,
"parameters": [
{ "name": "Состояние", "value": "Новое", "attributeId": 110399 }
],
"viewsTotal": 16248,
"viewsToday": 4,
"source": "avito.ru",
"fetchedAt": "2026-11-07T03:22:15.474Z",
"status": "ok"
}Use it from code
Actor ID: cliqtomedia/avito-scraper. You need your Apify API token from Apify Console → Settings → API & Integrations.
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/avito-scraper").call(run_input={
"query": "велосипед",
"region": "moskva"
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~avito-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"query": "велосипед", "region": "moskva"}'# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool
tool = ApifyActorsTool("cliqtomedia/avito-scraper")
result = tool.invoke({"run_input": {"query": "велосипед", "region": "moskva"}})
print(result)The cURL call waits for the results, up to 300 seconds. For longer runs, start a run (/runs) and get the results with a webhook or by checking the run. Apify API docs. LlamaIndex, MCP for AI agents and the JavaScript client: AI agents & MCP.
Data fields (40)
| Field | Type | Meaning |
|---|---|---|
itemId | string | Public Avito listing ID. |
url | string | Public listing page without tracking parameters. |
title | string | Listing title. Private contacts are removed. |
priceText | string | Price text shown by Avito. |
currency | string | RUB when a numeric price is shown. |
location | string | Public location text. |
address | string | Public listing address, when shown. |
category | string | Source category name. |
postedAt | string | Publication time in ISO 8601 UTC when Avito returns an exact timestamp. |
description | string | Listing description as plain text. Private phone numbers and email addresses are removed. |
sellerType | string | Source seller type, when shown. |
source | string | Data source: avito.ru. |
sourceUrl | string | Public source page for the listing. |
fetchedAt | string | Time the row was fetched, in ISO 8601 UTC. |
status | string | ok for a listing that was read successfully; not_found for a listing that no longer exists. |
descriptionPreview | string | Short description shown in search results. It may be cut off by Avito. |
listingSummary | string | Short specifications shown in the search card. |
changeType | string | new or changed when listing history is enabled. |
price | number | Current numeric price in RUB. A missing price is null, not zero. |
latitude | number | Public latitude. |
longitude | number | Public longitude. |
categoryId | number | Source category ID. |
sellerRating | number | Public seller rating, rounded to two decimal places. |
sellerReviewCount | number | Public number of seller reviews. |
viewsTotal | number | Public total listing views. |
viewsToday | number | Public listing views today. |
modelRating | number | Public model rating. |
modelReviewCount | number | Total public reviews for the model. |
images | array | Available public listing image links. |
parameters | array | Listing specifications shown by Avito. |
productSpecs | array | Model specifications when available. |
productReviews | array | Public model review text, ratings and original date labels. Review author names are excluded. |
modelComparables | object | Price statistics for a sample of matching model offers. Null when this model has no comparison data. |
isUnderpriced | boolean | True when the price is at least 20% below other comparable prices on the same source search page; null when fewer than 10 prices are available. |
priceWithoutDiscount | number | Previous price in RUB when the source shows a higher old price. |
discountPercent | number | Price reduction as a positive percentage, based on the current and old prices. |
districtId | number | Public source district ID, when returned. |
metroId | number | Public source metro station ID, when returned. |
verticalId | number | Source vertical category ID, when returned. |
imageCount | integer | Number of photos returned by the source. |
Input settings (25)
The main fields of the input form. With the API you send them as JSON.
| Setting | Name in the API | Type | Example value |
|---|---|---|---|
| Search words | query | string | "велосипед" |
| Region | region | string | "moskva" |
| Search links | searchUrls | array | [] |
| More search phrases | queries | array | [] |
| Listing links | listingUrls | array | [] |
| Category path | categoryPath | string | |
| Maximum listings | maxItems | integer | 10 |
| Read full listing details | includeDetails | boolean | false |
| Read model reviews | includeReviews | boolean | false |
| Compare model prices | includeComparables | boolean | false |
| Maximum reviews per listing | maxReviews | integer | 1000 |
| Minimum price (RUB) | minPrice | integer | |
| Maximum price (RUB) | maxPrice | integer | |
| Sort order | sort | string | "relevance" |
| Seller type | sellerType | string | "any" |
| Prefer the selected region | localOnly | boolean | false |
| Only new listings | onlyNew | boolean | false |
| Track changed listings | trackChanges | boolean | false |
| History name | stateName | string | |
| Skip listing IDs | excludeListingIds | array | [] |
| Skip listings without a numeric price | skipNegotiablePrice | boolean | false |
| Flag low prices in search results | flagUnderpriced | boolean | false |
| Maximum pages per search | maxPagesPerSearch | integer | 100 |
| Send results to (optional) | deliveryConnector | string | |
| Notion page or channel (optional) | deliveryTarget | string |
