Developing an auto dealer website on 1C-Bitrix
We develop auto dealer websites on 1C-Bitrix that convert visitors into leads. Our team has over 12 years of experience in Bitrix development and has delivered more than 80 projects for auto dealers. An auto dealer website is not just a catalog — it's a sophisticated selection tool. Visitors don't add cars to a cart — they select, compare, calculate credit, and book test drives. The average session on a dealer site is 6–9 minutes, with 3–4 filter switches and 2–3 open car cards. If the make-model filter lags, photos load one by one, or the credit calculator requires a page reload, the visitor leaves for auto.ru. We build architecture that matches aggregators in speed but remains manageable from the Bitrix admin panel.
Catalog architecture: new and used cars
The first decision is whether to store new and used cars in one or separate information blocks. One infoblock with sections by type works for multi-brand dealers with up to 2000 items: 80% of properties overlap, empty properties don't bloat the b_iblock_element_property table. Two infoblocks are justified when new cars are generated through a configurator (make → model → trim) and used cars are VIN-specific instances. We recommend for a mid-size dealer (500–3000 cars): an "Cars" infoblock with "New" and "Used" sections, Highload-blocks for "Makes", "Models", "Generations", "Trims", and a "Promotions" infoblock.
Car properties — at least 40 fields. Key for filtering and aggregators:
| Property | Code | Type | Indexing |
|---|---|---|---|
| Make | BRAND | S:Highload | Facet index |
| Model | MODEL | S:Highload | Facet index |
| Year | YEAR | N (number) | Facet index |
| Price | PRICE | N | Facet index |
| Mileage | MILEAGE | N | Facet index |
| Engine type | ENGINE_TYPE | L (list) | Facet index |
| Engine volume | ENGINE_VOLUME | N | Facet index |
| Transmission | TRANSMISSION | L (manual, automatic, robot, CVT) | Facet index |
| Drive | DRIVE | L | Facet index |
| Body type | BODY_TYPE | L | Facet index |
| Color | COLOR | S | Facet index |
| VIN | VIN | S | No (exact match) |
| Status | STATUS | L | Facet index |
| Photos | PHOTOS | F (multiple) | No |
| 360 exterior | SPIN_360_URL | S | No |
| Interior panorama | INTERIOR_PANORAMA | S | No |
Why cascading filtering is critical for the catalog?
The standard bitrix:catalog.smart_filter shows all property values simultaneously. A user selects make BMW — but the model list still shows Camry, Ceed. This breaks UX. Cascading filtering is needed: select make → models recalculated, select model → generations recalculated.
Option 1: Custom AJAX controller. A separate endpoint /api/catalog/filter-values/:
class FilterValuesController extends \Bitrix\Main\Engine\Controller
{
public function getModelsAction(int $brandId): array
{
$models = [];
$res = \CIBlockElement::GetList(
[],
['IBLOCK_ID' => CAR_IBLOCK_ID, 'ACTIVE' => 'Y', 'PROPERTY_BRAND' => $brandId],
['PROPERTY_MODEL' => 'CNT'],
false,
['PROPERTY_MODEL']
);
while ($row = $res->Fetch()) {
$models[] = ['id' => $row['PROPERTY_MODEL_VALUE'], 'count' => $row['CNT']];
}
return $models;
}
}
On the frontend — BX.ajax.runAction, updating the model select via Choices.js or Tom Select. Option 2: Preload a JSON dependency tree — faster but doesn't reflect actual stock. Combination: preload tree + AJAX recalc of counts on any filter change — optimal UX.
For range sliders (price, mileage, year) — bitrix:catalog.smart_filter provides MIN/MAX, on the frontend noUiSlider, AJAX via bitrix:catalog.section.
How to avoid errors in XML feed generation?
Auto aggregators are the main traffic source. Each has its own XML format and mandatory fields. auto.ru uses the cars.xml format:
<cars>
<car>
<mark_id>BMW</mark_id>
<folder_id>X5</folder_id>
<modification_id>xDrive30d</modification_id>
<body_type>ALLROAD_5_DOORS</body_type>
<year>2024</year>
<run>0</run>
<color>ЧЕРНЫЙ</color>
<transmission>AUTOMATIC</transmission>
<engine_type>DIESEL</engine_type>
<engine_volume>3.0</engine_volume>
<price>7890000</price>
<currency>RUR</currency>
<vin>WBAJC51090B123456</vin>
<unique_id>car_12345</unique_id>
<images>
<image>https://site.ru/upload/cars/12345/photo1.jpg</image>
</images>
</car>
</cars>
Critical fields: mark_id and folder_id must match the aggregator's reference. We build a Highload-block FeedMapping to translate values (automatic → AUTOMATIC for auto.ru, "Automatic" for Avito). Generation — abstract class BaseFeedGenerator, concrete implementations for each format. An agent runs every 30–60 minutes, files in /upload/feeds/. Before overwriting — XSD schema validation; on error — notification to the manager.
Car comparison
Users add up to 4 cars to comparison via a button in the catalog. IDs stored in localStorage (unauthorized) or in a Highload-block UserCompare (authorized). The component loads properties by ID array, renders a table with difference highlighting.
Trade-in and credit calculators
Trade-in: evaluation form — make, model, year, mileage, condition. On the client, JavaScript takes base price from Highload-block TradeInPrices and applies coefficients. Exact evaluation after inspection. Credit calculator — annuity formula with sliders, rates from Highload-block "Partner Banks".
1C and inventory integration
Synchronization via CommerceML (standard Bitrix exchange with 1C, property mapping customization) or 1C REST API (HTTP service, updates every 15–30 minutes). Key is VIN. More details in Bitrix documentation (CommerceML).
360 view and visual content
360 view — set of 36–72 photos around, library SpriteSpin. Interior panorama — spherical image, viewed via Pannellum.js. Files stored in /upload/cars/{ID}/360/.
Test drive and service booking
Booking form — via bitrix:form.result.new or Bitrix24 REST API (crm.lead.add with source TEST_DRIVE). Client receives SMS confirmation. Service booking — similar with job type selection.
SEO and Schema.org
Each car card is a landing page. SEO templates: title "Buy #BRAND# #MODEL# #YEAR# — #CITY# | Dealer", description with specs. Schema.org markup Vehicle + Offer:
{
"@context": "https://schema.org",
"@type": "Vehicle",
"name": "BMW X5 xDrive30d",
"brand": {"@type": "Brand", "name": "BMW"},
"model": "X5",
"vehicleModelDate": "2024",
"mileageFromOdometer": {
"@type": "QuantitativeValue",
"value": "0",
"unitCode": "KMT"
},
"fuelType": "Diesel",
"vehicleTransmission": "Automatic",
"color": "Black",
"vehicleIdentificationNumber": "WBAJC51090B123456",
"image": ["https://site.ru/upload/cars/12345/photo1.jpg"],
"offers": {
"@type": "Offer",
"price": "7890000",
"priceCurrency": "RUB",
"availability": "https://schema.org/InStock",
"seller": {
"@type": "AutoDealer",
"name": "Dealer Name"
}
}
}
What's included in the project
- Architectural documentation (infoblocks, Highload-blocks, property mapping).
- Access to admin panel, CRM, hosting.
- Training for managers on catalog and feed management.
- Technical support for 30 days after launch.
- Source code and deployment instructions.
Stages and timelines
| Scale | Timelines |
|---|---|
| Single-brand dealer, up to 200 cars, basic filter | 6–8 weeks |
| Multi-brand dealer, 500–2000 cars, feeds + 1C | 10–14 weeks |
| Dealer network, 3000+ cars, multisite, CRM | 14–24 weeks |
Timelines do not include photography and 360 content preparation — these are parallel processes.
We will evaluate your project and propose the optimal solution. Contact us for a consultation.







