# Bytbil Scraper - Swedish Car Listings & Dealer Data (`studio-amba/bytbil-scraper`) Actor

Scrape used car listings from Bytbil.com, Sweden's #2 dedicated car classifieds site. Extract prices, specs, mileage, fuel type, dealer info. No login required.

- **URL**: https://apify.com/studio-amba/bytbil-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 result scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Bytbil Scraper

Scrape used car listings from [Bytbil.com](https://www.bytbil.com), Sweden's #2 dedicated car classifieds site, and export structured vehicle data to JSON, CSV, Excel, or any format you need.

### Why use Bytbil Scraper?

- **Sweden's #2 dedicated car site** -- Bytbil.com is focused entirely on cars, unlike general classifieds sites, and lists inventory from thousands of Swedish car dealers.
- **Dealer-heavy inventory** -- most listings come from professional dealers rather than private sellers, so you get consistent, well-documented specs and dealer contact details.
- **Structured vehicle data** -- get make, model, year, price, mileage, fuel type, transmission, body type, drivetrain, location, and dealer name in a clean, consistent format.
- **No login or cookies required** -- works without any Bytbil account. No credentials needed.
- **Swedish mileage conversion** -- automatically converts Swedish "mil" (1 mil = 10 km) to kilometers for easy international comparison.
- **Filter by specs** -- narrow results by make, model, year range, price range, or free-text keyword.
- **Fast HTTP scraping** -- Bytbil.com has no anti-bot protection, so this scraper runs on plain HTTP requests, not a browser. Cheaper and faster than Playwright-based scrapers.
- **Scales to thousands** -- scrape 20 or 10,000 listings. Built-in pagination handles multi-page result sets.
- **Export anywhere** -- download results as JSON, CSV, Excel, XML, or push to Google Sheets, webhooks, or any integration.

### How to scrape Bytbil.com data

1. **Go to the Bytbil Scraper page** on Apify Store and click "Try for free."
2. **Enter a make and/or model** -- use the lowercase, hyphenated slug as it appears on Bytbil.com, e.g. `volkswagen`, `volvo`, `mercedes-benz`.
3. **Or use free text** -- search by keyword across listing titles and descriptions, e.g. "drag" (tow hitch) or "automat".
4. **Set optional filters** -- narrow results by year range or price range in SEK.
5. **Set the maximum results** -- the default is 100 listings. Increase to get more data or decrease for a quick sample.
6. **Click Start** -- the scraper requests Bytbil.com's search results, follows each listing to pull full specs, and pushes rows to the dataset as it goes.
7. **Download your data** -- when the run finishes, go to the Dataset tab and export to JSON, CSV, Excel, or connect via API.

Leaving all filters empty scrapes Bytbil's full current inventory (all makes), so the actor always returns data even with no input.

### Input parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `searchQuery` | string | | Free-text keyword, matched against listing titles/descriptions |
| `make` | string | `volkswagen` | Car manufacturer slug (`volkswagen`, `volvo`, `mercedes-benz`, `toyota`, etc.) |
| `model` | string | | Specific model filter (`golf`, `xc60`, etc.), best combined with `make` |
| `yearFrom` | integer | | Minimum model year |
| `yearTo` | integer | | Maximum model year |
| `priceFrom` | integer | | Minimum price in SEK |
| `priceTo` | integer | | Maximum price in SEK |
| `maxResults` | integer | `100` | Maximum number of listings to scrape |
| `proxyConfiguration` | object | Apify Proxy (automatic) | Proxy settings. No residential proxy needed -- Bytbil.com has no anti-bot protection |

### Output example

Each listing is returned as a JSON object:

```json
{
    "listingTitle": "Volkswagen Golf SC TDI 105hk Masters 3-Brukare Sensorer Drag",
    "make": "Volkswagen",
    "model": "Golf",
    "year": 2014,
    "price": 99800,
    "currency": "SEK",
    "mileage": 173660,
    "fuelType": "Diesel",
    "transmission": "Automatisk",
    "bodyType": "Kombi",
    "driveType": "2WD",
    "location": "Stockholm",
    "sellerName": "Riddermark Bil – Megastore Strängnäs",
    "sellerType": "Dealer",
    "imageUrl": "https://pro.bbcdn.io/09/09c4d7d8-4b00-7623-1573-00005016e3d9?rule=legacy-main",
    "url": "https://www.bytbil.com/stockholms-lan/personbil-golf-sc-tdi-105hk-masters-3-brukare-sensorer-drag-8147-19393462",
    "scrapedAt": "2026-09-13T14:07:14.794Z"
}
```

### Data fields

| Field | Type | Description |
|-------|------|-------------|
| `listingTitle` | string | Full listing title from Bytbil |
| `make` | string | Car manufacturer (Volvo, BMW, Toyota, etc.) |
| `model` | string | Car model name (Golf, XC60, Corolla, etc.) |
| `year` | integer | Model year (null if not available) |
| `price` | number | Price in Swedish kronor (null if not listed) |
| `currency` | string | Always "SEK" |
| `mileage` | number | Odometer in km, converted from Swedish mil (null if missing) |
| `fuelType` | string | Bensin (petrol), Diesel, El (electric), Hybrid, Laddhybrid |
| `transmission` | string | Automatisk (automatic) or Manuell (manual) |
| `bodyType` | string | Body style, e.g. Halvkombi, Kombi, SUV |
| `driveType` | string | Drivetrain, e.g. 2WD, 4WD/AWD |
| `location` | string | City where the vehicle is listed |
| `sellerName` | string | Name of the dealer selling the car |
| `sellerType` | string | "Dealer" or "Unknown" -- Bytbil is primarily a dealer platform |
| `imageUrl` | string | Main listing photo URL (null if no image) |
| `url` | string | Direct link to the listing on Bytbil.com |
| `scrapedAt` | string | ISO 8601 timestamp of when the data was collected |

### Cost estimate

Bytbil.com has no anti-bot protection, so this scraper runs on plain HTTP requests (no browser), which keeps compute cost low. Each listing costs two requests: one shared search-results page fetch (24 listings per page) and one detail-page fetch to pull full specs.

- **50 listings**: well under $0.05 in compute
- **500 listings**: a few cents in compute
- **5,000 listings**: still a small fraction of a dollar in compute

The actual run cost on the Apify platform also includes the platform's per-result pricing, shown on the Store listing. Usage cost only settles once a run reports SUCCEEDED - reading the dataset mid-run will undercount what the run will actually cost.

### Tips for best results

- **Use the make/model slug, not the display name** -- Bytbil's URLs use lowercase, hyphenated slugs (`mercedes-benz`, not "Mercedes-Benz"). Check a category link on Bytbil.com if you're not sure of the slug.
- **Start small** -- test with 20-50 results first to verify the output matches your needs before running large scrapes.
- **Mileage is in km** -- the scraper automatically converts Swedish "mil" (10 km units) to standard kilometers.
- **Some listings are private-lease offers** -- Bytbil mixes standard purchase listings with monthly private-lease pricing (`privatleasing`) on a handful of listings. The `price` field always reflects whatever headline price the listing shows, so a private-lease row's price is a monthly SEK amount, not a purchase price. Check `listingTitle` for "privatleasing" if this matters for your use case.

### FAQ

**What categories does this scraper cover?**
Passenger cars (personbil) listed under Bytbil.com's `/bil` section. Bytbil also lists motorcycles, motorhomes, and trailers under separate sections, which this actor does not cover.

**Does it work without a Bytbil account?**
Yes. No login, cookies, or account needed. The scraper accesses publicly available listing data.

**Why are some fields empty?**
Not all dealers fill in every detail field, and a small share of listings omit price or image entirely. In practice, key fields (make, model, year, price, mileage, fuel type) are populated on essentially all listings, since Bytbil is a dealer-driven platform with consistent listing quality.

**Can I scrape specific Swedish regions?**
The current version searches all of Sweden. You can filter results by the `location` field after scraping, or add a `priceFrom`/`priceTo`/`yearFrom`/`yearTo` filter to narrow the inventory before scraping.

**How often does Bytbil data change?**
Bytbil is dealer-driven and updates constantly as dealers add and remove stock. For market monitoring, consider scheduling daily or weekly runs.

**What is a Swedish "mil"?**
One Swedish mil equals 10 kilometers. This is the standard unit for car odometers in Sweden. The scraper converts mil to km automatically.

### About Bytbil

[Bytbil.com](https://www.bytbil.com) is Sweden's #2 dedicated car classifieds site, focused entirely on new and used car listings rather than general classifieds. Unlike Blocket (Sweden's #1 site, which covers all kinds of classifieds with cars as one category), Bytbil.com is built specifically around car dealers, aggregating stock from thousands of Swedish dealerships alongside private-leasing offers and dealer contact information.

# Actor input Schema

## `searchQuery` (type: `string`):

Free-text search term, matched against listing titles and descriptions (e.g. 'automat', 'drag', 'dragkrok'). Leave empty to browse full inventory.

## `make` (type: `string`):

Car manufacturer slug to filter by (e.g. 'volkswagen', 'volvo', 'mercedes-benz', 'toyota'). Use the lowercase, hyphenated slug as it appears in the Bytbil.com URL.

## `model` (type: `string`):

Specific model to filter by (e.g. 'golf', 'xc60'). Best used together with Make.

## `yearFrom` (type: `integer`):

Minimum model year filter.

## `yearTo` (type: `integer`):

Maximum model year filter.

## `priceFrom` (type: `integer`):

Minimum price in Swedish kronor.

## `priceTo` (type: `integer`):

Maximum price in Swedish kronor.

## `maxResults` (type: `integer`):

Maximum number of car listings to scrape.

## `proxyConfiguration` (type: `object`):

Proxy settings. Bytbil.com has no anti-bot protection, so the default Apify Proxy (no residential group) works fine.

## Actor input object example

```json
{
  "make": "volkswagen",
  "maxResults": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchQuery": "",
    "make": "volkswagen",
    "maxResults": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/bytbil-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchQuery": "",
    "make": "volkswagen",
    "maxResults": 50,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/bytbil-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQuery": "",
  "make": "volkswagen",
  "maxResults": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call studio-amba/bytbil-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,studio-amba/bytbil-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/zZOyv0UbsbCSjYvcQ/builds/hFUiF7RXLIWdWxumH/openapi.json
