AutoTrader.ca Scraper: Canadian Cars and Prices avatar

AutoTrader.ca Scraper: Canadian Cars and Prices

Pricing

from $0.42 / 1,000 listings

Go to Apify Store
AutoTrader.ca Scraper: Canadian Cars and Prices

AutoTrader.ca Scraper: Canadian Cars and Prices

Pull AutoTrader.ca cars, trucks, RVs, boats and more from all of Canada, no login, past 4,000 ads a search. Rows hold CAD price, AutoTrader.ca price badge, model year, trim, km, VIN where shown, dealer name, phone and street. Track new ads and price drops; CSV, Excel or API; pay per listing.

Pricing

from $0.42 / 1,000 listings

Rating

0.0

(0)

Developer

Automation Craft

Automation Craft

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 hours ago

Last modified

Share

AutoTrader.ca Scraper: Canadian Cars and Prices

AutoTrader.ca Scraper turns AutoTrader.ca, Canada's largest vehicle marketplace, into clean rows: one row per ad with the price in Canadian dollars, AutoTrader.ca's own price badge (great, good or fair price), the model year, make, model and trim, kilometres, fuel, transmission, engine, the city, province and postal code, and the seller: a dealer's name, street, phones and dealer page, or a private seller. Search by make and model, keyword, province, postal code or city with a radius, or a dealer's whole stock; paste search links from your browser; or give ad links, including old AutoTrader links. Cars and trucks, motorcycles, RVs, heavy trucks, trailers, boats, watercraft, snowmobiles, heavy equipment and farm equipment. No login, no browser.

Searches larger than AutoTrader.ca's 4,000 row limit are split on their own. Turn on Listing details for the full description, the equipment list, the VIN where AutoTrader.ca shows it, the Carfax link, the dealer's stock number, colours, drivetrain, AutoTrader.ca's market price median and the dealer's Google rating. Name a monitor and schedule the Actor: each run delivers and bills only ads it has not delivered before, tracks price drops and increases, checks every ad that left the search on its own page before it reports it removed, and can send the news to Telegram, Slack, Discord, WhatsApp or your webhook.

Who uses it

  • Dealers watching the stock and prices of other dealers in their province, and where an ad sits against AutoTrader.ca's price badge and market median.
  • Car buyers and brokers tracking one model across Canada for price drops, new ads and vehicles that sold.
  • Lead and market teams reading dealer stock with phones, street addresses, dealer pages and Google ratings.
  • Analysts and valuation tools who need AutoTrader.ca as rows in JSON, CSV or Excel through the Apify API.

Features

FeatureSettingsEvent billed
Makes and models by name ("Toyota RAV4", "Ford F-150", "Honda Civic") or id, a trim text after " / "; 124 car makes in a pick list and the make lists of nine other vehicle typesmakeModels, makesListing
AutoTrader.ca's own keyword searchkeywordsListing
Ten vehicle types: cars and trucks, motorcycles and ATVs, RVs, heavy trucks, trailers, boats, watercraft, snowmobiles, heavy equipment, farm equipmentvehicleTypeListing
Provinces and territories; postal codes, cities with their province or coordinates with a radius of 1 to 1,000 kmprovinces, locations, radiusKmListing
A dealer's whole stock from its id or dealer page link, or within the makes you namedealersListing
Pasted AutoTrader.ca search links, every part and parameter checkedsearchUrlsListing
Single ads by link or id, and old AutoTrader links (/a/.../5_<number>), read with their detailsadUrlsListing by URL
Named filters: condition, seller type, damaged vehicles, price, model year, kilometres, power (hp or kW), fuel, transmission, body type, drivetrain, exterior and interior colour, upholstery, paint, cylinders, price badge, equipment, certified programs, seats, doors, previous owners, online within days, price reducedsee Inputno charge
Any other AutoTrader.ca filter by its own parameter namefiltersno charge
Row filters: words to keep or leave out, "Price on Request" ads in or out, an online since window, ads you already have, custom rules on 36 output fieldsincludeKeywords, excludeKeywords, priceOnRequest, postedWithinHours, postedWithinDays, postedAfter, postedBefore, excludeAdIds, customFiltersno charge
12 sorts, caps per run, per search and in pages, a start pagesort, maxItems, maxItemsPerSearch, maxPagesPerSearch, startPageno charge
Past 4,000 rows a search: slices by province, seller type, model year and price, planned with count callssplitLargeSearches (on)no charge
Continue an interrupted run without paying for an ad twiceresumeFromDatasetIdno charge
An identical run within hours answered from the rows an earlier run stored, without reading the site againcacheHoursthe rows' own events
Full description, equipment by category, VIN, Carfax links (English and French), stock number, body type, colours, seats, doors, cylinders, drivetrain, weight, previous owners, accident flag, warranty, market price median and price bands, city and highway fuel consumption, coordinates, the date the ad went online; the dealer's homepage, logo and Google ratingincludeDetailsListing details
A monitor: only ads new to it, run after run, with or without delivering its first runmonitorName, deliverBaselineListing (new ads only) and Results page
Price drops and increases with thresholds, field changes, reappeared ads, removals checked on the ad's own pagetrackChanges, changeTypes, minPriceChange, minPriceChangePercent, trackFieldsListing update
Every known ad again as a full snapshot; reposts marked or left outemitUnchanged, markReposts, skipRepostsListing (snapshot rows)
Notifications: Telegram, Slack, Discord, WhatsApp Cloud API, webhook (HMAC SHA-256 signature, extra headers)see The monitor and notificationsfree
Prices also in one of 9 other currencies at the European Central Bank's rate of the daycurrencyincluded
Image size, description format and length, compact rows, empty fields left out, AutoTrader.ca's own record of the adimageSize, descriptionFormat, descriptionMaxLength, compactOutput, excludeEmptyFields, includeRawRecordincluded
A private seller's phone numbers, seller id and exact coordinates (off by default)includePersonalDatafree
A coverage row per search, free status rows for misses, a run summary and an HTML run report (key REPORT)alwaysfree

Quick start

  1. Type a make and model (for example Toyota RAV4, Ford F-150 or Honda Civic).
  2. Pick provinces (Ontario is preset), or give a postal code or a city with its province (M5V 2T6, Calgary, AB) and a radius.
  3. Optional: pick filters (condition, seller type, price, model year, kilometres, fuel, transmission, price badge).
  4. Set Maximum listings and press Start.
  5. Download the rows as JSON, CSV or Excel, or read them through the API.

Example input, the Actor's own prefill:

{
"makeModels": ["Toyota RAV4"],
"vehicleType": "car",
"provinces": ["ON"],
"maxItems": 20
}

Used Honda Civics from dealers within 100 km of downtown Toronto, 2019 or newer, under 80,000 km, with a great or good price badge and the details:

{
"makeModels": ["Honda Civic"],
"locations": ["M5V 2T6"],
"radiusKm": 100,
"conditions": ["used"],
"sellerType": "dealer",
"yearMin": 2019,
"mileageMax": 80000,
"priceBadges": ["great_price", "good_price"],
"includeDetails": true,
"maxItems": 200
}

Every vehicle of one dealer:

{
"dealers": ["https://www.autotrader.ca/dealers/47940832"],
"maxItems": 1000
}

What you get

One row per ad (type: "listing"), one coverage row per search (type: "search"), free status rows for anything that did not end as a listing (type: "status"), with change tracking a removed row per ad that left the searches and is gone from AutoTrader.ca (type: "removed"), and one run summary at the end (type: "summary").

Listing fields

Fill rates were measured on a 1,000 row platform run on 2026-10-15 (the newest cars and trucks of all Canada, no other filter: 923 dealer and 77 private rows; includePersonalData off).

FieldWhat it holdsFilled
adId, url, legacyAdId, titleAutoTrader.ca's ad id, the ad's link, the old AutoTrader number when the ad came from an old link, the title100 %
make, model, modelGroup, variant, trim, engineas AutoTrader.ca lists them; the trim is the seller's textmake 100 %, model 100 %, trim 90.1 %
vehicleType, condition, damagedcar, motorcycle, rv and the other types; new or used; whether AutoTrader.ca marks the ad damagedtype and condition 100 %, damaged flag (true or false) 89.6 %
modelYearthe model year100 %
price, currency, priceOnRequest, previousPrice, msrpthe price in Canadian dollars (empty on a "Price on Request" ad, which has priceOnRequest: true), the price before a reduction, the maker's suggested priceprice 75.3 %, on request 24.7 %, previous price 0 % (it comes on ads with a reduced price: 4,839 cars in Canada on 2026-10-15, priceReducedOnly), MSRP 41.1 %
priceBadge, priceBadgeLabel, priceEvaluationAutoTrader.ca's price badge as a code (great_price, good_price, fair_price, above_average_price, expensive, below_market_range, no_rating), its words, the site's numbera badge other than no_rating 39.8 %
mileageKmkilometres97.8 %
fuel, fuelLabel, transmission, transmissionLabel, engineSizeCcm, powerKw, powerHpfuel and transmission as English codes and in the site's words; engine size; powerfuel 93.3 %, transmission 94.4 %, engine size 48.4 %, power 20.5 %
province, city, postalCode, street, country, distanceKmthe vehicle's place (a private seller's postal code cut to its first three characters unless includePersonalData is on); the street for dealers only; the distance from your place on a search with a radius100 %; street on 923 of 923 dealer rows
sellerType, sellerIddealer or private; the dealer's id (the same on every ad of one dealer; a private seller's only with includePersonalData)100 %
dealerName, dealerPhones, dealerPagea dealer's name, phone numbers and AutoTrader.ca dealer pageon dealer rows: name and page 100 %, phones 99.6 %
privateSellerPhonesa private seller's phones, only with includePersonalDataempty with it off
image, images, imageCountthe first photo, the photos the search row carries at imageSize, their number73.8 % (median 8 photos)
leadsRange, availableNow, certifications, dealBuilderUrl, dealBuilderUrlFrAutoTrader.ca's interest band, availability, certified programs, the dealer's online deal links in English and Frenchleads band 100 %, certified 4.3 %, deal links 0.4 % of dealer rows
placementorganic (a result in the search's own order) or promoted (a row AutoTrader.ca inserts into the results)100 %
missingFieldsthe core fields (price, kilometres, model year, fuel, transmission, postal code, city, image) the source left empty on this adempty on 52.1 % of rows
convertedwith currency: the price converted, the rate, its date and sourcewith a currency other than CAD
searchKey, searchLabel, searchPage, searchSlice, searchPosition, source, monitorName, deliveryId, scrapedAtwhat found the ad (search, or adUrl for ad links), the search, its page, slice and position, when the row was madeset by the Actor
detailsIncluded, pageCharged, cached, cachedAtwhether this row's details were read and billed, whether it carried its page's Results page charge, whether it came from the cacheset by the Actor
change, possibleRepostOfwith a monitor: what changed since the last delivery; an earlier ad id of the same vehiclemonitor runs

Measured on a 200 row platform run with details on 2026-10-15 (the newest cars and trucks of all Canada: 190 dealer and 10 private rows).

FieldWhat it holdsFilled
description (and descriptionHtml, descriptionMarkdown by descriptionFormat)the seller's full text82.0 %
equipment, equipmentByCategorythe equipment list, also grouped by AutoTrader.ca's categories82.5 % (median 18 items)
imagesevery photo link87.5 % (median 7)
vin, carfaxUrl, carfaxUrlFr, carfaxModethe VIN where AutoTrader.ca shows it (inside its Carfax link), the Carfax report linksVIN 23.0 %, Carfax link 81.5 %
stockNumberthe dealer's own stock number98.9 % of dealer rows
bodyType, bodyColor, manufacturerColor, interiorColor, paintType, upholsteryas named100 %, 87.0 %, 62.5 %, 45.0 %, 3.5 %, 1.5 %
seats, doors, gears, cylinders, driveTrain, weight, engineLitresas named72.0 %, 78.0 %, 14.0 %, 58.0 %, 84.5 %, 1.5 %, 26.0 %
previousOwners, hadAccident, accidentFree, fullServiceHistory, nonSmoking, warranty, warrantyExistsas the seller gives them5.0 %, 47.5 %, 47.5 %, 83.0 %, 83.0 %, 1.5 %, 100 %
fuelConsumptionCity, fuelConsumptionHighway, fuelConsumptionCombinedlitres per 100 km as AutoTrader.ca shows themcity 44.0 %, highway 45.0 %, combined 0.5 % (200 rows with details, build 0.1.2, run tlHhHufwbqko1jO3f)
marketPriceMedian, priceVsMarket, priceVsMarketPercent, priceRangesAutoTrader.ca's market price median for the vehicle, the ad's price against it, the price bands behind the badgemedian 40.0 %, against it 40.0 %, bands 40.0 %
onlineSince, daysOnlinewhen the ad went online and days since100 %
latitude, longitudethe place (rounded to 2 decimals for private sellers with includePersonalData off)100 %
dealerHomepage, dealerLogo, dealerGoogleRating, dealerGooglePlaceId, dealerGoogleMapsUrlthe dealer's website, logo and Google rating with its Maps linkon dealer rows: homepage 56.3 %, logo 86.3 %, Google rating 67.4 %

Removed rows (trackChanges)

adId, url, reason, message, verified (true: read on the ad's own page), sourceStatus (removed: AutoTrader.ca answers that the ad is gone; not_found: it no longer knows the id), lastPrice, firstSeenPrice, priceChangeCount, firstSeenAt, daysTracked, monitorName, scrapedAt. Written only when every search of the run was read to its end (no ad links, no posted window, no stop). Each ad the run did not meet is read once on its own page: one that is still listed (its price, place or details moved it out of the search) is not reported; one that could not be read waits for the next complete run. When more than half of the tracked ads (and more than 5) are missing at once, none are reported and the run says so in a free row.

Sample row (a real row of the prefill run; some fields left out)

{
"type": "listing",
"adId": "2f4b451d-9158-491e-9459-7c1bcbc8fcc5",
"title": "2024 Toyota RAV4 Hybrid 2.5",
"make": "Toyota",
"model": "RAV4",
"variant": "RAV4 Hybrid",
"trim": "Hybrid Limited|AWD|HEATEDCOOLEDSEATS|SUNROOF|JBL|+",
"vehicleType": "car",
"condition": "used",
"modelYear": 2024,
"price": 37587,
"currency": "CAD",
"priceOnRequest": false,
"priceBadge": "great_price",
"priceBadgeLabel": "Great price",
"mileageKm": 143054,
"fuel": "hybrid",
"fuelLabel": "Gas/Electric Hybrid",
"transmission": "automatic",
"engineSizeCcm": 2500,
"province": "ON",
"city": "Toronto",
"postalCode": "M3J 2A9",
"street": "100 TORO ROAD",
"sellerType": "dealer",
"sellerId": "47940832",
"dealerName": "FAVORIT MOTORS",
"dealerPhones": [{ "type": "Office", "number": "833-651-4332", "callTo": "+18336514332" }],
"dealerPage": "https://www.autotrader.ca/dealers/47940832",
"placement": "promoted",
"searchLabel": "Toyota RAV4 in Ontario",
"searchPage": 1,
"source": "search",
"detailsIncluded": false,
"scrapedAt": "2026-10-15T17:42:55.783Z"
}

searchKind, searchLabel, searchMakeModel, searchKeyword, searchPlace, searchRadiusKm, searchDealerId, vehicleType, sort, adsOnAutoTrader (AutoTrader.ca's total), searchCapRows, slices, slicesWalked, countCalls, adsBeyondReach, pagesRead, rowsSeen, distinctAdsSeen, adsDelivered, alreadyDelivered, knownToMonitor, filteredOut and filteredOutBy (per filter), removedOrGone, detailsFailed, newAdsMayLieBeyond (a monitor), complete, stoppedBy, morePagesOffered and a note.

Free status rows

A setting or an item the Actor refused (invalid), a make or model name that matches several entries (ambiguous, with the candidates), a place AutoTrader.ca does not know or places outside its province (not_found), an ad that was removed (removed) or an id that never existed (not_found), an ad or a page that could not be read (failed), a search whose filters AutoTrader.ca did not apply as sent (search_not_applied), an ad link a monitor already delivered or an ad of the dataset you resume from (skipped), a cached answer (skipped), a notification that failed (notification_failed), and the reason a run stopped (limit_reached, source_unavailable, monitor_unavailable). A run writes 20 such rows plus one per billed event, at most 200 of one kind; past that it counts the rest in the summary.

How searches are read

  • Past 4,000 rows. AutoTrader.ca serves at most 20 pages of 200 rows for one search, and some rows of each page are ads it inserts into the results (marked placement: "promoted"), so one walk reaches about the first 3,400 results in the search's order. When a search holds more and your caps want more, it is split with count calls into slices of 3,000 ads or fewer: by province, then seller type, then model year, then price, each slice read from its first page. Province and seller type divide every ad exactly; model year slices miss ads without a year and price slices miss "Price on Request" ads, so the coverage row counts anything no slice held as adsBeyondReach.
  • Every filter checked. AutoTrader.ca answers an unknown parameter with a wider search and repeats it in its echo. The Actor sends only parameters from AutoTrader.ca's own filter map, refuses a pasted link with any other, compares the echo with what it sent on every page, and checks every row against the filters it can read (price, kilometres, model year, power, fuel, transmission, seller type, condition, damaged state, province, price badge, dealer, make and model, vehicle type); a page that differs is billed as nothing and gets a free search_not_applied row.
  • Places. A postal code or a city is placed by AutoTrader.ca itself, once per run, with a count call, and must come back with coordinates inside its own province (a postal code's first letter names its province); a place the site cannot place, or places elsewhere, is a free row and its searches are not read. A city needs its province code (Halifax, NS).
  • Empty answers. AutoTrader.ca now and then answers a full search with an empty page (about 1 or 2 calls in 100); such a page is asked again before the walk ends.
  • One row per ad. An ad found by several searches in one run is delivered and billed once.
  • Access. Requests leave from the run's own address, two at a time and at most 3 a second by default; Apify's datacenter proxy is used only when that address cannot reach the site. A refusal is asked once more on the same exit after a pause; a second refusal ends the run's reading with a free source_unavailable row.

How much does it cost to scrape AutoTrader.ca?

You pay per listing row delivered, plus a small start fee per run. Platform usage is included.

EventFreeBronzeSilverGold
Listing (per 1,000 ads from searches, search links and dealer stock)$0.49$0.49$0.49$0.42
Results page (per 1,000 pages of up to 200 ads that delivered a paid row; in a monitor run, every page read)$0.50$0.45$0.40$0.35
Listing details (per 1,000 rows, only with includeDetails)$1.00$0.90$0.80$0.70
Listing by URL (per 1,000 ads from adUrls, details included)$1.49$1.39$1.29$1.12
Listing update (per 1,000 changes and removed rows, monitor runs with trackChanges only)$0.49$0.49$0.49$0.42
Actor start (per run)$0.0045$0.0045$0.0045$0.0045

Platinum and Diamond plans pay the Gold price. On Apify's Free plan the Actor runs like on any other plan, at the Free prices, with no row limit of its own. The Actor start event is a flat $0.0045, charged once per run, with no plan discount. The Store pricing card shows these same prices per 1,000 events: "$0.49 / 1,000" on the Listing row means one listing costs $0.00049, and "$1.39 / 1,000" on the Listing by URL row means one ad from a link costs $0.00139.

  • 4,500 listings from one search (a measured run past the 4,000 row limit: 4,500 Listings, 25 Results pages, 1 Actor start) cost $2.205 + $0.0125 + $0.0045 = $2.222 on Free, $2.205 + $0.01125 + $0.0045 = $2.22075 on Bronze, $2.205 + $0.01 + $0.0045 = $2.2195 on Silver and $1.89 + $0.00875 + $0.0045 = $1.90325 on Gold.
  • 200 listings with details on Bronze (a measured run: 200 Listings, 200 Listing details, 1 Results page) cost 200 x $0.00049 + 200 x $0.0009 + $0.00045 + $0.0045 = $0.28295.
  • 100 ad links on Bronze cost 100 x $0.00139 = $0.139, plus $0.0045: $0.1435.
  • A monitor run on Bronze over 2 searches reads 3 pages each (6 x $0.00045 = $0.0027); with 12 new listings it costs $0.0027 + 12 x $0.00049 + $0.0045 = $0.01308.
  • What is never billed: ads left out by your filters, an ad found twice in one run, ads a monitor already delivered (unless change tracking finds a change, or you ask for a full snapshot), removed and unknown ads, a page whose filters AutoTrader.ca did not apply, count calls, place and old link lookups, the reads that check a removal, coverage, status and summary rows, the run report and the notifications.
  • Limits: set Maximum listings (100 when left empty) and, in the run options, a maximum charge for the run: the Actor stops before it would pass either, and a row whose events do not all fit is withheld whole. Maximum listings counts listings, changes and removed rows together. A run also spends a small allowance on work that delivers nothing billable (count calls, place and old link lookups, pages whose ads your filters leave out, removal checks), USD 0.0006 plus a share of every paid event it delivers; past it the run stops with a free row that says so.

Input

SettingWhat it does
makeModelsmakes, or makes with a model, as AutoTrader.ca lists them; a trim text after " / "; ids such as 70 or `70
makescar makes picked from AutoTrader.ca's list of 124
keywordsfree text for AutoTrader.ca's own keyword search, each its own search
vehicleTypecar (default), motorcycle, rv, heavy_truck, trailer, boat, watercraft, snowmobile, heavy_equipment, farm_equipment
provincesprovince and territory codes (ON, QC, BC, AB, MB, SK, NS, NB, NL, PE, YT, NT, NU) or names; each its own search
locations, radiusKmpostal codes (M5V 2T6), cities with their province (Toronto, ON) or coordinates (43.65, -79.38); a radius of 1 to 1,000 whole km (50 by default)
dealersdealer ids (sellerId of a row) or dealer page links (https://www.autotrader.ca/dealers/<id>): alone, the whole stock; with makes, the dealer's stock within those makes
searchUrlsAutoTrader.ca search links (https://www.autotrader.ca/cars/...); a part or parameter the Actor does not know refuses the link with a free row
adUrlsad links, ad ids or old AutoTrader ad links, each billed as a Listing by URL
resumeFromDatasetIdthe dataset of an earlier run of this Actor: its ads are left out, free (up to 500,000 rows read)
named filtersconditions, sellerType, damagedVehicles, minPrice to maxPrice, yearMin to yearMax, mileageMin to mileageMax, powerMin to powerMax with powerUnit, fuelTypes, transmission, bodyTypes, driveTypes, colors, interiorColors, upholstery, paintTypes, cylinders, priceBadges, equipment, certifications, seatsMin to seatsMax, doorsMin to doorsMax, previousOwnersMax, onlineWithinDays, priceReducedOnly
filtersany other AutoTrader.ca parameter by its own name and value; an unknown name refuses the run with a free row
row filtersincludeKeywords, excludeKeywords, priceOnRequest, customFilters, postedWithinHours, postedWithinDays, postedAfter, postedBefore (need details and the newest or oldest sort), excludeAdIds (up to 5,000)
sortnewest (default), oldest, price_low, price_high, mileage_low, mileage_high, year_new, year_old, power_high, power_low, best, distance (needs a place)
maxItems, maxItemsPerSearch, maxPagesPerSearch, startPage, splitLargeSearchescaps (100 listings when maxItems is left empty) and how far each search is read
includeDetails, includeRawRecordthe details add-on; AutoTrader.ca's own record of each ad
cacheHoursanswer an identical run within 1 to 720 hours from the rows an earlier full run stored (up to 2,000 rows; not with a monitor)
currency, imageSize, descriptionFormat, descriptionMaxLength, compactOutput, excludeEmptyFieldshow rows are written
includePersonalDataa private seller's phones, seller id, full ad link and exact coordinates (off by default; see Privacy)
monitor and notificationsmonitorName, deliverBaseline, trackChanges, changeTypes, minPriceChange, minPriceChangePercent, trackFields, emitUnchanged, markReposts, skipReposts, notificationLimit, notifyOnlyChanges and the channel settings below
failIfIncomplete, maxFailedRequestsPercent, requestsPerSecond, maxRequestRetries, maxConcurrency, proxyConfigurationfail the run when a search was not read to its end or too many reads failed; the pace (0.5 to 4 a second, 3 by default), retries, requests at once (1 to 4, 2 by default); the run's own address (default), Apify datacenter, or your own proxy links

A run holds up to 200 searches (makes and models x keywords x places x dealers, plus one per search link) and up to 5,000 ad links.

The monitor and notifications

Name a monitor (monitorName) and schedule the Actor (every hour, for example). The monitor remembers every ad it delivered in a named store this Actor creates for itself, up to 35,000 ads, so each run delivers and bills only ads it never delivered before; known ads are skipped for free. A monitor reads newest first, the newest 3 pages of 200 ads of each search by default (set maxPagesPerSearch to change it), does not split searches, and pays a Results page for each page it reads; when the coverage row says newAdsMayLieBeyond, raise the pages or run more often. With deliverBaseline off, the first run only stores the ads its searches list now (after your filters), and later runs deliver what is new; such a monitor takes no ad links and no details add-on (its first run reads no details). One monitor name belongs to one set of settings: a run with other settings delivers nothing and gets a free row saying so.

  • Change tracking (trackChanges): a known ad whose price changed comes back with change (direction, previous price, difference, first seen price, dated price history, drop in percent since first seen), billed as a Listing update. minPriceChange (dollars) and minPriceChangePercent leave smaller moves out, measured from the price last delivered (they add up until one passes); changeTypes picks price drops, price increases, field updates, reappeared and removed ads. With trackFields a change of other fields counts too (changeType: "updated", changedFields). Removed ads: see Removed rows above. Changes are found on the search rows a monitor reads: a value only the details show (a trim missing from the search row) is compared when the ad's details are read for another reason (a price or another field changed).
  • Snapshots and reposts: emitUnchanged delivers known ads again (billed as Listing); markReposts marks a new ad with the same seller, make, model, model year, kilometres and trim as one the monitor delivered earlier under another id (possibleRepostOf), and skipReposts leaves it out free.
  • Notifications (free, with or without a monitor) after the rows were delivered and billed: Telegram (your own bot, one message per listing), Slack and Discord incoming webhooks and WhatsApp Cloud API (one message per run), each naming up to notificationLimit listings (10 by default, up to 30); a webhook (webhookUrl) gets JSON batches of 100, up to 1,000 a run, signed in the header x-signature-sha256 with webhookSecret (8 to 200 characters), with your own webhookHeaders. A failed call never fails the run: it is a free notification_failed row, without your address or token.

Privacy and personal data

Private sellers are private persons. With includePersonalData off (the default), the phone numbers AutoTrader.ca shows for them, their seller id and AutoTrader.ca's own record of their ad are not delivered, their exact coordinates are rounded to 2 decimals (about 1 km), their postal code is cut to its first three characters (the forward sortation area, M4E for M4E 3T5), and their url is the id only link (the ad's own link repeats the seller's trim text). With it on, those come as AutoTrader.ca shows them. Texts are never changed: the title, trim and description (text, Markdown and HTML) come exactly as AutoTrader.ca serves them, switch on or off, including any phone number or e-mail address a seller wrote into them. AutoTrader.ca shows no private seller's name or street. A dealer's name, address, phones, homepage and rating are business data and are always delivered. Photos are delivered as links; they belong to the people who posted them. You are responsible for a lawful use of personal data, PIPEDA and Quebec's Law 25 included.

This Actor is not affiliated with, endorsed by or sponsored by AutoTrader.ca or Trader Corporation. AutoTrader.ca is a trademark of its owner. It is an unofficial tool that reads public pages without logging in. AutoTrader.ca's terms of use forbid access by automated means and the collection of its content. You are responsible for a lawful use of the data, for complying with Canadian privacy law for any personal data, and for keeping a scheduled monitor to what you need.

What this Actor does NOT do

  • No login, no messages to sellers, no offers, no saved searches or anything else that needs an AutoTrader.ca account.
  • No private seller phone numbers, seller ids or exact coordinates unless you turn on includePersonalData. Dealers' business contacts are always delivered.
  • No VIN recovered from other sites. The VIN comes only where AutoTrader.ca shows it (inside its Carfax link: 23 and 65 percent of the ads in two runs of 2026-10-15); no other marketplace is searched for a hidden VIN.
  • No merging with other marketplaces (Kijiji, CarGurus, Carpages). This Actor reads AutoTrader.ca only.
  • No dealer e-mail addresses. AutoTrader.ca shows none, and the dealer's own website is not read; rows carry the dealer's phones, street, homepage link and dealer page.
  • No electric range or dealer opening hours. AutoTrader.ca served none on 205 ads read with details in our tests of 2026-10-15 (3 of them electric).
  • No Carfax reports. The Carfax links are delivered as AutoTrader.ca shows them; the reports are not opened.
  • No more than 4,000 rows from one AutoTrader.ca page walk. Past that the search is split automatically (splitLargeSearches, on by default, not in a monitor); what a split cannot reach is counted on the coverage row.
  • No export into Notion or other apps from inside the run. Connect the dataset with Apify's integrations, using your own accounts.
  • No ready made example tasks yet. Start from the prefill or the examples above.
  • No preloaded snapshot. Every run reads AutoTrader.ca live (or, with cacheHours, reuses your own earlier run's rows); the data is as fresh as the run.

FAQ

Does AutoTrader.ca have an API?

AutoTrader.ca publishes no public API for reading its ads. This Actor reads the same public ads any visitor sees, with no login, and gives them to you as rows you can read through the Apify API (examples below).

This Actor reads only public ads without logging in, and a private seller's phone number comes only when you turn it on. AutoTrader.ca's terms forbid automated access, so you are responsible for a lawful use of the data, Canadian privacy law included (see Legal).

How many cars can one AutoTrader.ca search return?

AutoTrader.ca serves at most 4,000 rows (20 pages of 200) for one search, and some of them are ads it inserts into the results, so one walk reaches about the first 3,400 results. Past that, this Actor splits the search by province, seller type, model year and price on its own and reads every slice; the coverage row gives AutoTrader.ca's total, the slices read and anything left beyond reach.

What does the AutoTrader.ca price badge mean?

It is AutoTrader.ca's own rating of an ad's price against the market: great price, good price, fair price, above average price, or none. Every row carries it as a code (priceBadge) and in the site's words (priceBadgeLabel), you can search by it (priceBadges), and with details each row also carries AutoTrader.ca's market price median and the ad's price against it.

How do I get alerts for new AutoTrader.ca listings or price drops?

Name a monitor and schedule the Actor, every hour for example. Each run delivers and bills only ads the monitor has not delivered before; with change tracking it also delivers price drops and removed ads, and it can send them to Telegram, Slack, Discord, WhatsApp or your webhook.

Why does this Actor run with limited permissions?

It needs nothing beyond its own storages: it reads AutoTrader.ca's public ads and writes to its own dataset and key-value store. Limited permissions keep it from touching anything else in your account. A monitor's memory and the result cache are named stores the Actor creates for itself.

Use it from AI agents (MCP)

AI agents can run this Actor as a tool through Apify's MCP server (https://mcp.apify.com, add automation_craft/autotrader-ca-scraper to its tools) or through the API below. For agents, set compactOutput (only the core fields on each row) and excludeEmptyFields, keep maxItems small, and read the coverage row (type: "search") to see whether a search was read to its end.

API

Each example starts a run and waits for its rows (the run-sync endpoint suits short runs; use maxItems to keep them short).

curl -X POST "https://api.apify.com/v2/acts/automation_craft~autotrader-ca-scraper/run-sync-get-dataset-items" \
-H "Authorization: Bearer <YOUR_API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"makeModels": ["Toyota RAV4"], "provinces": ["ON"], "maxItems": 20}'
const res = await fetch('https://api.apify.com/v2/acts/automation_craft~autotrader-ca-scraper/run-sync-get-dataset-items', {
method: 'POST',
headers: { Authorization: 'Bearer <YOUR_API_TOKEN>', 'Content-Type': 'application/json' },
body: JSON.stringify({ makeModels: ['Toyota RAV4'], provinces: ['ON'], maxItems: 20 }),
});
const rows = await res.json();
console.log(rows.filter((r) => r.type === 'listing'));
import requests
res = requests.post(
"https://api.apify.com/v2/acts/automation_craft~autotrader-ca-scraper/run-sync-get-dataset-items",
headers={"Authorization": "Bearer <YOUR_API_TOKEN>"},
json={"makeModels": ["Toyota RAV4"], "provinces": ["ON"], "maxItems": 20},
timeout=330,
)
listings = [r for r in res.json() if r["type"] == "listing"]

Changelog

See the Changelog tab. 0.1: first release.

More data tools by Automation Craft