Toyota Europe Inventory & Prices
Pricing
from $5.00 / 1,000 results
Toyota Europe Inventory & Prices
Extract vehicle catalog, grades, variants, and prices from Toyota Europe across 30+ countries. Get list prices, discounts, promotions, engine specs, CO2 emissions, and fuel consumption for every model and trim level.
Pricing
from $5.00 / 1,000 results
Rating
0.0
(0)
Developer
Rastriq โ Structured data from the world
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8.1 hours
Issues response
5 days ago
Last modified
Categories
Share
Extract the complete vehicle catalog, grades, variants, and pricing from Toyota Europe across 39 markets (42 country configurations) โ all from a single actor run. Toyota Europe Inventory & Prices is the fastest and most affordable way to monitor European car pricing at scale.
๐ Try it free โ your first $5 of usage is on Apify. No credit card required.
๐ What is Toyota Europe Inventory & Prices?
Toyota Europe operates a unified digital platform across all European markets. Behind the public configurator websites, structured pricing data is available for every model, grade, and variant across 39 markets โ from Spain to Kazakhstan.
Toyota Europe Inventory & Prices extracts every vehicle configuration with full pricing breakdown โ no browser needed, no JavaScript rendering, pure data. This makes it dramatically faster and cheaper than browser-based alternatives.
Use Toyota Europe Inventory & Prices to:
- ๐ Monitor competitor pricing โ track Toyota's list prices, discounts, and promotions across European markets
- ๐ Compare prices across countries โ use
car_id + engine_code + fuel_codefor approximate cross-market variant matching - ๐ท๏ธ Analyze the full catalog โ every model, every grade, every engine/transmission combination
- ๐ข Track promotions in real time โ detect when discounts appear or disappear on specific variants
- ๐ถ VAT-exclusive analysis โ use
vat_rateand net prices for B2B price benchmarking - ๐ฟ CO2 and emissions tracking โ per-variant CO2, WLTP fuel consumption and electric range data
- ๐ Automate recurring workflows โ schedule daily or weekly runs, set up webhooks, and keep your datasets fresh
The Apify platform gives Toyota Europe Inventory & Prices superpowers: scheduling, monitoring, API access, and integrations with Make, Zapier, Google Sheets, and more โ all out of the box.
๐ What data does Toyota Europe Inventory & Prices extract?
Toyota Europe Inventory & Prices returns ~85 structured fields per variant:
Core fields (always present)
| Field | Type | Description |
|---|---|---|
country / country_name | string | Country code and full name (e.g. fr / France) |
currency | string | Local currency code (EUR, GBP, PLN, CHF, SEK...) |
model_code / model_name | string | Model identifier and localized display name |
model_id | string | Toyota's shared identifier โ consistent across all countries |
grade / grade_code | string | Trim level (e.g. Active, Design, GR Sport, Excel) |
body_type | string | Body style in local language (e.g. 5P, Berline, SUV) |
engine | string | Engine spec (e.g. "1.8L Hybride 140ch") |
transmission | string | Transmission type (e-CVT, Automatic, Manual) |
wheel_drive | string | Drive type (FWD, AWD, 4x4) |
is_hybrid | boolean | Whether the variant uses a hybrid powertrain |
fuel_types | string | Pipe-separated fuel type codes (e.g. "H_1 | PH_1") |
price_list | number | Manufacturer's recommended retail price before discounts |
price_discount | number | Value of active promotional discount |
price_with_discount | number | Final consumer price after promotions |
price_net | number | Price excluding taxes (after discount) |
price_tax | number | Tax amount included in the price (after discount) |
has_promotion | boolean | Whether active promotions apply |
co2_combined_gkm | number | Per-variant CO2 g/km from specs calculationDetails |
fuel_consumption_l100km | number | Combined fuel consumption (l/100km) |
grade_features | string | Key equipment included in each grade |
car_id | string | Unique identifier for this specific variant configuration |
car_description | string | Full variant description |
source_url | string | Main Toyota domain for the country (e.g. https://www.toyota.es) |
data_source | string | prices_api (full), specs_fallback (prices failed), or catalog_only (basic) |
fallback_reason | string | Why a fallback was used (e.g. prices_endpoint_failed), null for normal rows |
price_quality | string | Confidence flag: ok (price from prices API, highest confidence), degraded (catalog or specs fallback), missing (no price available). Derived from data_source + price_list presence |
vehicle_segment | string | M1 (passenger car) or N1 (light commercial vehicle) hint from body type / seats, relevant for tax classification in some markets |
scraped_at / extracted_at | string | ISO 8601 UTC timestamp |
Discovery-mode fields (when discoveryMode=true)
| Field | Type | Description |
|---|---|---|
min_price | number | Best available starting price for the model in discovery mode |
min_price_list | number | Manufacturer list price (before discounts) for the cheapest variant in discovery mode |
min_price_net | number | Net price (excluding taxes) for the cheapest variant in discovery mode |
min_price_with_discount | number | Price after promotions for the cheapest variant in discovery mode |
Specs fields (when includeSpecs=true, default)
| Field | Type | Description |
|---|---|---|
vat_rate | number | VAT rate for this market (e.g. 0.21 for Spain). Derived from price decomposition when API doesn't provide it directly |
vat_rate_source | string | Provenance: api_calculationDetails, derived_from_specs, derived_from_specs_model_level, statutory_rate, statutory_rate_sanity_rejected, unavailable, unavailable_tax_includes_fees |
vat_rate_statutory | float|null | Statutory VAT rate from tax authority |
source_tax_ratio | number | Raw from.tax/from.net ratio from source; informational. Compare with vat_rate_statutory |
vat_includes_registration_tax | boolean | Deprecated (always False since v0.2.20). Use registration_tax_applies instead |
registration_tax_applies | bool | Whether market levies a registration/purchase tax in the gross price |
registration_tax_type | string|null | Official tax name (autovero, bpm, registreringsafgift, engangsavgift, otv, purchase_tax) |
registration_tax_in_vat_base | bool|null | Whether reg tax is inside the VAT base (True only for TR, IL) |
price_ex_vat | float|null | Price minus statutory VAT only (current/discounted) |
price_ex_vat_list | float|null | Price minus statutory VAT only (list) |
price_ex_all_taxes | float|null | Fully tax-free price; null when reg tax can't be isolated |
price_ex_all_taxes_list | float|null | Fully tax-free list price |
price_ex_vat_incl_registration_tax | float|null | Alias of price_ex_vat โ unambiguous name |
price_ex_vat_excl_registration_tax | float|null | Alias of price_ex_all_taxes โ unambiguous name |
vat_amount_current | float|null | VAT amount in currency (gross โ price_ex_vat) |
vat_amount_list | float|null | VAT amount on list price |
registration_tax_amount_current | float|null | Registration tax amount isolated from source |
registration_tax_amount_list | float|null | Registration tax amount on list price |
registration_tax_source | string|null | api_tax_field or unavailable |
tax_calculation_status | string|null | complete, partial, or unavailable |
tax_calculation_method | string|null | How decomposition was performed |
tax_calculation_warning | string|null | Caveat when decomposition is limited |
price_net_current | number | Alias of price_ex_vat โ net price with statutory VAT removed |
price_tax_current | number | Tax component of the current gross price |
price_net_list | number | Net price of the original list price |
price_tax_list | number | Tax component of the original list price |
price_vat_included | boolean | true when the API's price_net equals the gross price (no decomposition available) |
price_source_tax_scope | string|null | What from.tax contains: vat_only, registration_tax_only, vat_and_other_charges, or null |
fiscal_region | string | Province/region used for tax calculation |
fiscal_region_rate | number | Regional tax surcharge rate |
price_net_before_discount | number | Net price before any promotions |
price_tax_before_discount | number | Tax amount before promotions |
price_total_config | number | Configurator total price |
price_total_incl_promotions | number | Total price including all promotions |
grade_id | string | Grade-level UUID โ shared by all variants of the same grade within a market. NOT a cross-country key (Toyota may assign different UUIDs to equivalent grades in different markets). Use car_id + engine_code + fuel_code for approximate cross-market matching |
grade_sort_index | integer | Grade display order (1 = entry level) |
available_online_sales | boolean | Available for online purchase |
available_online_leasing | boolean | Available for online leasing |
available_online_reservation | boolean | Available for online reservation |
n_colours | integer | Number of available colours |
colour_codes | string | Pipe-separated colour codes (e.g. "040 | 089 | 1G3") |
colour_names | string | Pipe-separated colour display names |
colour_types | string | Pipe-separated colour types (Solida/Metalizada/Bi-tono) |
colour_rgbs | string | Pipe-separated hex RGB values |
colour_base_price_list | number | Base colour list price |
colour_base_price_net | number | Base colour net price |
n_engines | integer | Number of engine options |
engine_codes | string | Pipe-separated engine codes |
engine_names | string | Pipe-separated engine display names |
engine_categories | string | Pipe-separated engine categories (Hybrid/PHEV/etc) |
engine_has_plugin | boolean | Any engine is a plugin hybrid |
engine_any_sold_out | boolean | Any engine is sold out |
engine_category_codes | string | Pipe-separated distinct powertrain codes of the model (e.g. "MHEV | BEV") |
n_powertrain_types | integer | Number of distinct powertrain categories; >1 means WLTP summaries are cross-powertrain ranges |
engine_category | string | Per-variant powertrain code: BEV, MHEV, HEV, PHEV, ICE |
engine_category_name | string | Localized powertrain name for the variant |
engine_category_source | string|null | Original API category before normalization |
engine_category_warning | string|null | Warning when name contradicts API category |
engine_code | string | Per-variant engine code (e.g. 1gd-mhev-28mh) |
fuel_code | string | Per-variant fuel code (electric, 2 diesel, 1 petrol, h_1 hybrid) |
submodel_code / submodel_name | string | Submodel when the model is split (e.g. "Hilux 48V" / "Hilux BEV") |
wltp_source | string | variant (car_id matched), specs_fallback, unmatched (WLTP fields null), null (specs off / catalog-only) |
wltp_value_scope | string | model_summary (model-level minโmax, powertrain-inconsistent fields nulled) or null |
wltp_fuel_combined | string | WLTP fuel consumption summary (e.g. "1.3 - 5.2 l/100 km"); null on BEV variants of mixed models |
wltp_co2_combined | string | WLTP CO2 range (e.g. "30 - 119 g/km") |
wltp_electric_range | string | WLTP electric range; null on ICE/MHEV/HEV variants of mixed models |
wltp_energy_consumption | string | Energy consumption from WLTP (Wh/km) |
wltp_energy_consumption_kwh | string | Energy consumption in kWh/100km when available |
wltp_range_city | string | City range when available |
co2_wltp_numeric | number | Lower bound of wltp_co2_combined; in multi-powertrain models only kept for BEV variants (0) |
co2_combined_gkm_source | string | calculation_details, prices_api_energy, bev_zero_inferred, wltp_techspecs, wltp_techspecs_range_min, unavailable_multi_powertrain, unavailable_unmatched, unavailable, null |
n_equipment_items | integer | Total equipment items for this model |
grade_features_count | integer | Character count of grade features text |
n_upholsteries | integer | Number of upholstery options |
upholstery_codes | string | Pipe-separated upholstery codes |
upholstery_names | string | Pipe-separated upholstery names |
vehicle_type | string | Vehicle category (e.g. "Passenger") |
vehicle_category_source | string | Alias of vehicle_type โ the only vehicle categorisation from the source |
homologation_category | null | Always null. Not exposed by the source; do not infer from body/seats. |
katashiki | string | Toyota internal model code (e.g. GUN227L-DNTLRW). From PSLS, not decoded. |
suffix_code | string | PSLS suffix code |
available_from | string | ISO date when variant becomes available (from PSLS) |
available_to | string | ISO date when variant stops being available (from PSLS); 2999-12-31 = open-ended |
default_colour_code | string | Colour code from PSLS default configuration |
default_upholstery_code | string | Upholstery code from PSLS default configuration |
doors | integer | Number of doors (from specs body type) |
body_type_code | string | Internal body type code (from specs) |
fuel_code_list | string | Pipe-separated fuel codes from specs |
fuel_name_list | string | Pipe-separated fuel names |
fuel_has_hybrid | boolean | Fuel list includes a hybrid option |
n_colour_combinations | integer | Number of colour combinations for this variant |
default_colour_surcharge_exvat | number | Surcharge for default colour (ex VAT) |
default_colour_surcharge_invat | number | Surcharge for default colour (inc VAT) |
Model-level fields (from catalog and pricing data)
| Field | Type | Description |
|---|---|---|
has_electric | boolean | Model has an electric version |
has_fuel_cell | boolean | Model has a fuel cell version |
model_total_price | number | Model starting price from configurator |
model_total_price_incl_promo | number | Model starting price with promotions |
has_wheeldrives | boolean | Multiple wheeldrive options available |
configurator_url | string | Variant deep link when provided upstream; check configurator_url_source |
configurator_url_source | string | api_variant_links (from Toyota), constructed_unverified (specs-fallback pattern, known not to resolve), null |
model_page_url | string | Model page link published by the upstream API (CarChapter); usually redirects to the localized model page |
exterior_colour_id | string | UUID of default exterior colour |
upholstery_id | string | UUID of default upholstery |
variant_total_price | number | Variant total price from configurator |
promotion_name | string | Name of active promotion |
promotion_value | number | Discount value of active promotion |
Promotion fields (when includePromotions=true)
| Field | Type | Description |
|---|---|---|
promo_detail_codes | string | Pipe-separated promotion codes |
promo_detail_names | string | Pipe-separated promotion names |
promo_detail_from | string | Pipe-separated start dates (ISO) |
promo_detail_until | string | Pipe-separated end dates (ISO) |
promo_detail_entities | string | Pipe-separated promotion entities |
promotion_disclaimer | string | Legal disclaimer text (HTML cleaned) |
promo_disclaimer_date | string | Date parsed from promotion disclaimer text (ISO format) |
promo_date_conflict | boolean | True when structured API date and disclaimer date disagree |
Market Reference Matrix
The actor ships a versioned JSON file, src/market_reference.json, containing per-market tax and configuration metadata read at runtime. The file version (metadata.version) is logged at the start of every run and cited in regression reports.
Fields per market entry:
| Field | Type | Description |
|---|---|---|
vat_rate | float | Statutory VAT rate (e.g. 0.21 = 21%) |
effective_date | string|null | Date the current rate took effect (ISO 8601); null if stable/unknown |
authority_url | string|null | URL of the official tax authority page for this market's VAT rate. null for AM, IL, MD (authority URL not independently verifiable via HTTP). |
currency | string | ISO 4217 currency code |
toyota_domain | string | Toyota website domain for this market (e.g. toyota.es) |
language_code | string | Language code used by the actor for API requests (IETF/ISO 639-1). For multilingual markets (BE, CH) this is the primary locale; the actor also supports secondary locales. |
fiscal_region_default | string|null | Fiscal region parameter if the actor passes one; null for all current markets |
source_tax_ratio_reliable | bool | false where source_tax_ratio in the dataset should not be used for tax analysis. Currently false for NO (from.net for BEV = post-incentive residual, not market price) and CH (Toyota CH API exposes no net/tax decomposition). |
registration_tax.name | string|null | Name of the registration/purchase tax, if applicable |
registration_tax.basis | string|null | Tax basis (future use) |
registration_tax.in_toyota_price | bool|null | Whether the tax is embedded in Toyota's displayed list price |
registration_tax.actor_isolates | bool | Whether the actor extracts this tax as a separate amount |
registration_tax.in_vat_base | bool|null | Whether the tax sits inside the VAT base (affects ex-all-taxes calculation) |
registration_tax.n1_exempt | bool|null | Whether N1 vehicles are exempt from this tax |
Fail-fast policy: the actor raises FileNotFoundError at module import if src/market_reference.json is missing. A missing or malformed file will abort the run immediately rather than silently defaulting.
Versioning: metadata.version follows the build that introduced the last schema or data change. Pin the version string if you reference this file from external systems.
Tax-exclusive price reliability by market
The table below summarises per-market behaviour for price_ex_all_taxes and the informational source_tax_ratio field. See vat_rate_source in each dataset row for the per-row determination.
| Category | Markets | vat_rate_source | price_ex_all_taxes | Notes |
|---|---|---|---|---|
| VAT derived from source | Most EU markets | derived_from_specs | Available | Source decomposition from.tax/from.net matches statutory ยฑ1pp |
| VAT statutory (no source decomp.) | CH, MD, AM, AZ, GE, UA, KZ, RS | statutory_rate | Partial or null | Toyota API exposes no net/tax split; statutory rate applied; reg-tax not isolable |
| VAT statutory (sanity rejected) | GB, IT, KZ (current), others | statutory_rate_sanity_rejected | Uses statutory | Source ratio deviates >1pp from statutory โ non-VAT component embedded or source lag |
| VAT with reg-tax isolated | DK, FI, NL, NO, TR, IL | derived_from_specs or statutory_rate | Available (complete) | Actor isolates registration/purchase tax separately |
| Partial โ tax in VAT base | TR, IL | derived_from_specs or statutory_rate | tax_calculation_status=partial | รTV (TR) / purchase_tax (IL) sits inside the VAT base; fully tax-free price not computed |
| Embedded โ not isolable | GB, IT | statutory_rate_sanity_rejected | Not presented as verified | VED First Year Rate (GB) / IPT (IT) embedded in source price, no isolation field in API |
| source_tax_ratio unreliable | NO, CH | โ | โ | NO: from.net for BEV = post-incentive residual; CH: no decomp. available. Matrix marks source_tax_ratio_reliable=false |
KZ transitional note: Toyota Kazakhstan's API continues to embed the pre-2026 rate of 12% in price breakdowns. The actor detects the >1pp deviation from the statutory 16% (effective 2026-01-01), publishes vat_rate=0.16 via vat_rate_source=statutory_rate_sanity_rejected, and will switch automatically to derived_from_specs once Toyota KZ updates its API.
๐ Supported countries
Toyota Europe Inventory & Prices covers 39 markets (42 country configurations) across 6 regions:
| Region | Countries |
|---|---|
| Western Europe | ๐ช๐ธ Spain, ๐ซ๐ท France, ๐ฉ๐ช Germany, ๐ฌ๐ง UK, ๐ฎ๐น Italy, ๐ณ๐ฑ Netherlands, ๐ต๐น Portugal, ๐ฎ๐ช Ireland, ๐ฆ๐น Austria, ๐ง๐ช Belgium (NL/FR), ๐ฑ๐บ Luxembourg, ๐จ๐ญ Switzerland (DE/FR/IT) |
| Nordics | ๐ฉ๐ฐ Denmark, ๐ซ๐ฎ Finland, ๐ธ๐ช Sweden, ๐ณ๐ด Norway, ๐ฎ๐ธ Iceland |
| Central Europe | ๐ต๐ฑ Poland, ๐จ๐ฟ Czech Republic, ๐ธ๐ฐ Slovakia, ๐ญ๐บ Hungary, ๐ธ๐ฎ Slovenia, ๐ญ๐ท Croatia |
| Eastern Europe | ๐ท๐ด Romania, ๐ง๐ฌ Bulgaria, ๐ช๐ช Estonia, ๐ฑ๐ป Latvia, ๐ฑ๐น Lithuania, ๐ท๐ธ Serbia |
| Mediterranean | ๐ฌ๐ท Greece, ๐จ๐พ Cyprus |
| Eurasia & Middle East | ๐น๐ท Turkey, ๐บ๐ฆ Ukraine, ๐ฌ๐ช Georgia, ๐ฆ๐ฟ Azerbaijan, ๐ฎ๐ฑ Israel, ๐ฒ๐ฉ Moldova, ๐ฆ๐ฒ Armenia, ๐ฐ๐ฟ Kazakhstan |
Belgium and Switzerland have separate entries per language (e.g. Belgium NL vs Belgium FR). Currency is automatically matched to each market.
๐ Available models
The actor supports 34 Toyota model codes across 42 country configurations. Not all models are available in every market โ use discoveryMode to get a live list for each country.
| Code | Model | Markets |
|---|---|---|
hilux | Hilux | 39 |
landcruiser150 | Land Cruiser 250 | 39 |
yb | Yaris Cross | 36 |
ra | RAV4 | 36 |
pd | Proace City | 35 |
c-hr | C-HR | 34 |
cb | C-HR+ | 34 |
cx | Corolla Cross | 33 |
bz | bZ4X Touring | 32 |
de | bZ4X | 32 |
ya | Yaris | 32 |
proaceverso | Proace Verso | 32 |
ax | Aygo X | 31 |
proace | Proace | 31 |
pf | Proace City Verso | 30 |
corolla-hb | Corolla Hatchback | 29 |
gy | GR Yaris | 28 |
corolla-ts | Corolla Touring Sports | 28 |
pm_ps | Proace Max | 28 |
corolla | Corolla Sedan | 25 |
pg | Prius Plug-in Hybrid | 21 |
camry | Camry | 16 |
uc | Urban Cruiser | 15 |
mirai | Mirai | 15 |
su | GR Supra | 10 |
l1 | Land Cruiser 300 | 6 |
re | RAV4 PHEV | 6 |
highlander | Highlander | 5 |
ev | Proace Verso EV | 4 |
ec* | Proace City EV | 2 |
eq* | Proace City Verso EV | 2 |
fortuner* | Fortuner | 2 |
gr* | GR86 | 1 |
ep* | Proace EV | 1 |
* Available in very few markets.
Note: Toyota treats some variants as separate models. For example, bZ4X (
de) and bZ4X Touring (bz) have different model codes and ModelIDs โ select both if you need the full bZ4X family.
๐ How to use Toyota Europe Inventory & Prices
Extracting Toyota Europe inventory and pricing takes under two minutes:
- Create a free Apify account at apify.com โ your first $5 is free
- Open Toyota Europe Inventory & Prices in Apify Console or click Try for free on this page
- Click Save & Start โ the default configuration extracts all models from Spain with full specs
- Add more countries โ select any of the 39 supported markets from the dropdown
- Filter specific models (optional) โ select models like Corolla, Yaris, or RAV4 to reduce runtime
- Download your results in JSON, CSV, Excel, or XML from the Dataset tab โ or access them via API
โ๏ธ Input parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
countries | array | No | ["es"] | Select one or more markets from the dropdown (42 configurations available) |
modelFilter | string[] | No | [] (all models) | Filter by specific models using exact model codes (e.g. corolla-hb, ya, ra). Exact match only โ use discoveryMode to list available codes per country |
discoveryMode | boolean | No | false | Only fetch model catalog (1 req/country). Returns model codes, names, IDs, min prices. Use to discover available models before a full run |
includeSpecs | boolean | No | true | Fetch specs, CO2, VAT, colours, engines, WLTP data (default on since v0.2) |
includePromotions | boolean | No | false | Fetch detailed promotion info per model (+1 request/model) |
requestDelay | integer | No | 500 | Delay between requests in milliseconds |
proxyConfiguration | object | No | none | Optional โ typically not needed |
Example input:
{"countries": ["es", "fr", "de"],"modelFilter": ["corolla-hb", "ya"],"includeSpecs": true,"includePromotions": false,"requestDelay": 500}
๐ฆ Output example
Each result is a structured JSON object. Here's a sample from a real run (v0.2 with specs):
{"country": "es","country_name": "Spain","currency": "EUR","model_code": "ra","model_name": "RAV4","model_id": "5e1a8b7c-...","grade": "Advance","grade_code": "advance","body_type": "SUV","engine": "Plug-in Hybrid 300","transmission": "e-CVT","wheel_drive": "AWD-i","is_hybrid": true,"fuel_types": "H_1 | PH_1","price_list": 50750.0,"price_discount": 4000.0,"price_with_discount": 46750.0,"price_net": 41942.15,"price_tax": 8807.85,"has_promotion": true,"co2_combined_gkm": 30.0,"fuel_consumption_l100km": 1.3,"vat_rate": 0.21,"fiscal_region": "Madrid","grade_id": "b1f8443f-e12f-4f71-be34-f08f2dca6f53","grade_sort_index": 4,"available_online_sales": true,"price_net_before_discount": 41942.15,"price_total_config": 46750.0,"wltp_co2_combined": "30 - 119 g/km","wltp_fuel_combined": "1.3 - 5.2 l/100 km","n_colours": 17,"n_engines": 3,"n_upholsteries": 5,"vehicle_type": "Passenger","configurator_url": "https://www.toyota.es/...","data_source": "prices_api","scraped_at": "2026-09-15T12:00:00+00:00"}
Download results in JSON, CSV, Excel, XML, or HTML from the Output tab, or pull them programmatically using the Apify API.
๐ฐ How much does it cost to use Toyota Europe Inventory & Prices?
Toyota Europe Inventory & Prices uses Apify's standard Compute Unit (CU) pricing. Since it uses no browser, it is extremely lightweight:
- Memory: 256 MB (minimum)
- Runtime: ~30 seconds for 1 country (with specs), ~5 minutes for all 39 markets
- Typical cost:
0.01 CU per country ($0.005) - With
includePromotions: adds ~1 extra request per model (marginal cost increase)
A full 39-market run with all models costs approximately $0.15 โ making daily monitoring very affordable.
Is extracting Toyota Europe data free? Your first $5 of Apify usage is covered by the free plan credit โ enough to run this actor hundreds of times at no cost.
๐ก Tip: Run a small test with 1 country and a single model first to verify output before scaling up.
๐ Batching and cost control
Extracting a complete multi-country catalogue may exceed a single run's cost budget. The actor provides two complementary mechanisms to control completeness and cost:
Country-scoped runs (recommended)
Run one country (or a small group) per execution using the countries input parameter. This is the recommended way to guarantee a complete catalogue per market:
{"countries": ["de"],"includeSpecs": true,"includePromotions": false}
Each run is scoped to the countries you choose, and completed markets are listed explicitly in countries_completed in the run-summary. Because each run is self-contained, re-running a country you already completed does not create duplicate rows โ there is no partial internal state to replay.
Per-run cost cap
Set a maximum spend for the run via maxTotalChargeUsd (configured in the Apify Console under Run options โ Maximum total charge, or via the API query parameter). If the cap is reached mid-run, the actor stops cleanly and the run-summary reports exactly what happened:
countries_completedโ markets fully extracted before the cap was reachedcountries_partialโ the market that was in progress when the cap hitcountries_not_startedโ markets that were queued but never beganstop_reasonโcost_limit(vscompletedfor a normal finish)completenessโpartial(vscomplete)
Row counts remain internally consistent even under a cost cut: rows_written always matches the dataset's actual itemCount. A separate rows_attempted field records items the actor tried to push before the cut, and count_discrepancy: true flags that a mid-batch cut occurred.
Recommended cost budgets
| Scope | Suggested maxTotalChargeUsd |
|---|---|
| 1 country (small market) | $2 |
| 1 country (large market: DE, GB) | $3โ5 |
| 3 countries | $5โ10 |
| Full 39-market catalogue | $20+ |
Stateful resumption (roadmap)
Picking up mid-country after a cost-limit cut is not yet implemented. The current approach (country-scoped runs with adequate cost caps) is reliable and produces no duplicates. Stateful resumption is planned for a future development cycle.
โ Frequently Asked Questions
Is this actor legal to use?
This actor accesses Toyota Europe's public-facing configurator data, which serves the same information shown to any visitor on toyota.es, toyota.fr, etc. No authentication or login is required. The actor uses configurable request delays to be respectful of Toyota's servers.
As with any data collection activity, you are responsible for ensuring your use case complies with applicable laws (GDPR, CCPA) and Toyota's Terms of Service. For guidance, see Apify's blog on the legality of web scraping.
Can I get M1/N1 classification?
No. Toyota's European API does not expose homologation category (M1/N1/N1G), number of seats, maximum authorised mass, or payload. What it does expose is vehicle_type (e.g. "Passenger", "LCV"), the katashiki code per variant (which encodes body style, cabin type, and drivetrain according to Toyota's internal scheme), doors, and body_type_code. The actor does not attempt to decode the Katashiki โ if you have historical price lists with decoded Katashiki mappings, you are likely better positioned to build that mapping than we are. If you need us to attempt it, that would be a separate project with its own validation.
Why was CO2 always null in v0.1?
The primary pricing data returns an empty energy object for most markets. In v0.2, CO2 is extracted from the specs data's calculation details โ which has reliable per-variant CO2 values. Specs are now enabled by default to ensure this field is populated.
How do I match grades across countries?
grade_id is a grade-level UUID shared by all variants of the same grade within a single market โ it is NOT a reliable cross-country key, because Toyota may assign different UUIDs to equivalent grades in different markets. For approximate cross-market variant matching, use car_id + engine_code + fuel_code. For grade-level grouping within one market, grade_id is stable and reliable.
How do I calculate VAT-exclusive prices?
Use price_ex_vat (alias price_ex_vat_incl_registration_tax) for the price with statutory VAT removed (may still include registration tax). Use price_ex_all_taxes (alias price_ex_vat_excl_registration_tax) for the fully tax-free price โ this is null when the registration tax amount cannot be isolated from the source data. Check tax_calculation_status (complete = both available, partial = only ex_vat, unavailable = neither) and tax_calculation_method / tax_calculation_warning for the decomposition audit trail. price_net_current is an alias of price_ex_vat kept for backward compatibility.
What is vat_includes_registration_tax?
Deprecated since v0.2.20 โ always False. In earlier versions this was True in registration-tax markets. It is replaced by registration_tax_applies (whether the market levies a registration tax) and registration_tax_in_vat_base (whether the reg tax is inside the VAT base โ only TR/IL). Use registration_tax_type to identify the specific tax and registration_tax_amount_current for the isolated amount.
Why are some prices missing for Germany?
Primary pricing data returns an error for some German BEV models due to a server-side formatting issue with CO2=0. In v0.2.7, the actor automatically falls back to an alternative data source to build variant rows with full grade/engine/pricing detail (data_source=specs_fallback).
How often is the data updated?
Toyota updates their vehicle data regularly. Prices can change at any time when new promotions launch. Schedule daily or weekly runs to stay current.
Can I add more countries?
The actor already covers 39 Toyota Europe markets (42 configurations) โ select any combination from the Countries dropdown.
What is the model_id?
Toyota uses a shared identifier system across all European markets. The same model_id works in every country, making cross-country price comparisons straightforward.
Why does modelFilter return 0 results for some countries?
Model codes (slugs) vary across markets. For example, "Corolla" may appear as corolla, corolla-hb, corolla-ts, or corolla-cross depending on the country. Italy, for instance, offers corolla-ts (Touring Sports) but not corolla-hb (Hatchback). Some markets (Denmark, Norway) may not carry certain models at all. Use discoveryMode=true to list all available model codes for your target markets before setting a filter.
Why are WLTP fields null for some rows?
Check wltp_source first. "variant" (or "specs_fallback") means the row was matched in the technical specification data; "unmatched" means no match was found and the WLTP fields are null; null means specs were disabled (includeSpecs=false), unavailable for that model, or the row is catalog-only. Since v0.2.13, matched rows can also have individual WLTP fields set to null on purpose โ see the multi-powertrain question below.
What does wltp_value_scope = "model_summary" mean?
Toyota's data source publishes WLTP figures only as model-level summaries โ a minโmax range (or a min/max scalar) across every powertrain the model offers. There is no per-variant WLTP figure anywhere in the source. So a matched Hilux diesel and a matched Hilux BEV both receive the same "0 - 262 g/km" CO2 summary. wltp_value_scope makes this explicit; use n_powertrain_types to know whether the summary spans several powertrains (>1) or effectively describes a single one.
Why are some WLTP fields null on matched rows of multi-powertrain models?
Because the model summary cannot apply to every variant, the actor nulls the physically inconsistent fields based on the variant's real engine_category: wltp_electric_range, wltp_range_city and the kWh consumption fields are nulled on ICE/MHEV/HEV variants; wltp_fuel_combined is nulled on BEV variants; co2_wltp_numeric (the lower bound of the range, i.e. the BEV's 0) and scalar "0" summaries are nulled on combustion/hybrid variants. Nothing is dropped from the dataset โ rows are kept and flagged, so you decide.
What is the difference between co2_combined_gkm_source values?
calculation_detailsโ per-variant CO2 from the fiscal calculation block (most accurate, market-dependent)prices_api_energyโ CO2 from the pricing endpoint's energy block (rare)bev_zero_inferredโ variant is a BEV (engine_category = "BEV"), so 0 g/km is setwltp_techspecsโ single-powertrain model, scalar WLTP summary applied to the variantwltp_techspecs_range_minโ single-powertrain model whose WLTP summary is a range; the value is the lower bound, not the variant's exact figureunavailable_multi_powertrainโ mixed-powertrain model and no per-variant CO2 in the source; null rather than a misleading range minimumunavailable_unmatched/unavailableโ no match or no datanullโ specs disabled or catalog-only row
Can I trust configurator_url?
Only when configurator_url_source = "api_variant_links" (the link comes from Toyota's data). Rows with "constructed_unverified" carry a URL pattern that returns 404 โ localized paths and per-market model slugs are not derivable from the data source. The field is kept for backward compatibility and flagged; model_page_url gives the upstream model page link instead.
What does source_url point to?
source_url is the market portal URL (e.g. https://www.toyota.es) identifying the country source. It is not a direct link to the specific model or variant page. Use model_code and country to construct your own deep links if needed.
Why does vat_rate_source show different values?
api_calculationDetailsโ VAT rate published directly by the data source for the variant (most accurate)derived_from_specsโ source net/tax decomposition confirms the statutory rate (ยฑ1pp)derived_from_specs_model_levelโ model-level fiscal data confirms the statutory rate (fallback)statutory_rateโ Country's standard VAT rate applied as last resort (no usable decomposition)statutory_rate_sanity_rejectedโ Statutory VAT used because derived ratio deviated >1pp. Raw ratio preserved insource_tax_ratio. Typically means source tax includes non-VAT charges.unavailableโ Market does not expose VAT in its dataunavailable_tax_includes_feesโ Market bundles VAT with registration/purchase taxes (e.g. DK, NO).vat_rateis null.
Why did vat_rate change in Italy/UK/Romania/Estonia?
Since v0.2.25, the VAT sanity band was tightened from ยฑ5pp to ยฑ1pp. In these markets, the source from.tax/from.net ratio includes non-VAT charges and no longer passes the sanity check. vat_rate is now the statutory rate, and the raw ratio is preserved in source_tax_ratio for transparency.
Does this actor use a browser?
No. Toyota Europe Inventory & Prices works with structured data directly โ no browser, no JavaScript rendering. This is why it runs so fast and costs so little.
I found a bug or my run failed. Where do I report it?
Please open an issue in the Issues tab on this page. Include your input configuration and the run ID so we can investigate quickly.
๐ Related Rastriq Actors
Explore the full Rastriq intelligence portfolio on Apify Store:
| Actor | Description |
|---|---|
| Rastriq Store | Full catalog of marketplace intelligence and data extraction tools |
๐ Changelog
For full details see CHANGELOG.md. Summary by version (newest first):
0.2.39 (2026-09-20)
- README restructured (actually deployed) โ Product-first structure now live on the Apify Store. Supersedes 0.2.38 which was tagged but never deployed the restructured README. No code, schema, or output changes.
0.2.38 (2026-09-20)
- No-op โ Tagged as README restructure but the sourceFiles push did not include the updated README. Superseded by 0.2.39.
0.2.37 (2026-09-20)
- Input schema deployed for the first time โ
.actor/input_schema.json(7 fields, 42-country enum) now included in Apify builds. Console renders the structured input form. Fix: push toolingDOTDIR_ALLOW = {'.actor'}. No code changes.
0.2.35 (2026-09-19)
- Norway BEV ยง6-8 partial exemption โ BEV priced above NOK 300,000 threshold:
tax_calculation_status=partial,price_ex_vat=null.market_reference.jsonโ v1.3.0 withvat_reliefblock. 42-config regression gate now canonical (42 enum values, not 39 markets).
0.2.34 (2026-09-19)
- Documentation release โ
market_reference.jsonv1.2.0 with authority URLs, Toyota domain, language codes, fiscal-region defaults. Tax-exclusive reliability table added. No code changes.
0.2.33 (2026-09-18)
- VAT rate corrections (6 markets) โ EE 22%โ24%, RO 19%โ21%, SK 20%โ23%, CH 7.7%โ8.1%, IL 17%โ18%, KZ 12%โ16%.
market_reference.jsonintroduced (versioned JSON replacing inline dicts).
0.2.32 (2026-09-18)
- VAT corrections โ intermediate build, superseded by v0.2.33.
0.2.27
- Vehicle classification source fields โ
katashiki,suffix_code,available_from/available_to,default_colour_code/default_upholstery_code,doors,body_type_code,vehicle_category_source,homologation_category(always null).
0.2.26
- Labelling consistency โ
vat_ratesnapped to statutory within ยฑ1pp band.price_source_tax_scopeinferred centrally. No price changes.
0.2.25
- VAT sanity band tightened (ยฑ5pp โ ยฑ1pp) โ composite tax ratios now detected. New fields:
source_tax_ratio,price_source_tax_scope. Breaking:price_net_currentnow uses statutory VAT.
0.2.23
- Fix โ
includeSpecs=falseruns returned 0 rows due toregistration_tax_appliesnull validation.
0.2.20
- Tax model overhaul โ Registration-tax markets (DK, FI, NL, NO, TR, IL) get full tax transparency. ~20 new tax/price fields. Norway MHEV classification fix.
grade_iddocumentation corrected.
0.2.13
- Submodel traversal fix (Hilux, Proace family). Per-variant powertrain identity fields. WLTP scope made explicit. CO2 provenance on every row. Configurator URL honesty.
0.2.12
- VAT sanity check โ derived rates deviating >ยฑ5pp auto-rejected. Finland added to registration tax set.
0.2.11
- VAT statutory fallback. Registration tax flag (deprecated v0.2.20). Row-level configurator URLs.
0.2.9
- WLTP variant matching โ values populated only on matched variants. New fields:
wltp_source,co2_combined_gkm_source.
0.2.8
- Currency normalization โ obsolete codes (
LTL,YTL) mapped to current ISO codes.
0.2.7
- VAT derivation fallback from price decomposition. Correct net/tax computation. Romania currency fix. Expanded WLTP parser. German specs fallback. Promotion date conflict detection.
0.2
- Version 0.2 expands coverage from ~25 to ~85 fields per variant with zero extra requests for core enrichment. Specs enabled by default. Full pricing breakdown, CO2, colours, engines, WLTP, upholsteries, equipment, configurator links, promotions.