# OBI Austria Scraper — DIY Products, Prices & Stock (OBI.at) (`studio-amba/obi-at-scraper`) Actor

Scrape OBI.at products: name, price, original price, brand, EAN, rating, review count, SKU, stock and images. Tools, garden and building materials from Austria's leading DIY retailer. Search by keyword or category URL. No login or cookies required.

- **URL**: https://apify.com/studio-amba/obi-at-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

## OBI Austria Scraper — DIY & Home Improvement Retailer (OBI.at)

Know what OBI is charging today in Austria, not last month. This actor pulls current prices, stock status, and full product specs from obi.at, one of Austria's leading DIY chains, so you can watch pricing move or build a product database without opening a browser.

### What is OBI Austria Scraper?

OBI is one of the largest DIY and home improvement retailers in Austria, part of the same OBI Group that dominates the German market. Its catalog covers power tools, hand tools, screws and fasteners, paint, wood, flooring, garden equipment, bathroom fixtures, lighting, and building materials, priced and stocked separately from the German storefront.

This scraper crawls obi.at's search results and product detail pages using CheerioCrawler, extracting data from JSON-LD structured data, HTML elements, and product attribute tables. It visits each product's detail page for the richest possible data extraction, and falls back to the page's embedded product payload for the manufacturer name on the products where OBI's structured data omits it.

- **Austrian DIY market intelligence** — Track OBI.at pricing independently from obi.de; Austria has its own catalogue, stock levels, and pricing
- **Professional contractor procurement** — Pull pricing data on screws, fasteners, building materials, and tools for large-scale procurement comparison
- **Product specification database** — Build a comprehensive specs database from OBI's detailed product attribute tables covering dimensions, materials, power ratings, and compliance marks
- **Brand positioning analysis** — Study how brands like Bosch, Einhell, Metabo, Makita, and OBI's private labels are positioned across categories
- **European DIY pricing research** — Compare Austrian pricing against Germany (OBI, Hornbach, Bauhaus) and other European DIY retailers we cover

### What data does OBI Austria Scraper extract?

- **Product name** — Full German-language product title
- **Price & discounts** — Current price and strikethrough/original price
- **Brand** — Manufacturer name (Bosch, Einhell, Metabo, Skil, OBI Group Sourcing, etc.)
- **Stock availability** — InStock status from structured data
- **Ratings & reviews** — Star rating and review count
- **Product images** — Primary image and full gallery of all product photos
- **Technical specifications** — Detailed key-value specs from product attribute tables
- **Product description** — Full product description text
- **Product URL** — Direct link on obi.at
- **Category breadcrumbs** — Full category path from breadcrumb navigation
- **Product identifiers** — EAN/GTIN barcode, SKU, and internal product ID

### How to scrape OBI data

| Field | Type | Description |
|-------|------|-------------|
| `searchQuery` | String | Search by keyword — e.g., `"schrauben"`, `"bohrmaschine"`, `"farbe"`, `"gartenmoebel"` |
| `categoryUrl` | String | Category page URL — e.g., `https://www.obi.at/schrauben/c/1282` |
| `maxResults` | Integer | Maximum products to return (default: 100, max: 50,000) |
| `proxyConfiguration` | Object | Optional proxy for reliability |

**Tips:**

- Provide either `searchQuery` or `categoryUrl` — at least one is required
- The actor visits each product's detail page for full specs and descriptions, so it extracts richer data than listing-only scrapers
- For OBI's search, the URL pattern is `https://www.obi.at/search/{query}/`
- Category URLs follow the pattern `https://www.obi.at/{category-slug}/c/{category-id}`
- No proxy is strictly required — obi.at has no bot-wall — but one is recommended for scrapes above a few hundred products
- Leave the input empty and the actor defaults to a `bohrmaschine` (drill) search so you always get sample data

### Output

```json
{
    "name": "Einhell 650 W Schlagbohrmaschine TE-ID 650 E inkl. Tiefenanschlag",
    "brand": "Einhell",
    "price": 49.95,
    "currency": "EUR",
    "url": "https://www.obi.at/p/1264688/einhell-650-w-schlagbohrmaschine-te-id-650-e-inkl-tiefenanschlag",
    "scrapedAt": "2026-09-13T09:13:11.195Z",
    "originalPrice": 70.95,
    "productId": "1264688",
    "sku": "1264688",
    "imageUrl": "https://bilder.obi.at/d431c517-0b7f-46ca-a485-9d7bd07852d4/pr07F/image.jpeg",
    "rating": 4.5,
    "reviewCount": 16,
    "ean": "4006825565690",
    "inStock": true,
    "description": "Die praktische Schlagbohrmaschine TE-ID 650 E von Einhell mit leistungsstarken 650 W hilft Ihnen bei schweren und sehr schweren Bohrarbeiten in Holz, Metall und Beton...",
    "specs": {
        "Leistung": "650 W",
        "Max. Bohr-Ø in Beton": "13 mm",
        "Max. Bohr-Ø in Holz": "25 mm",
        "Max. Bohr-Ø in Stahl": "10 mm",
        "Schlagzahl": "0 - 48000/min",
        "Gewicht": "3,50 kg"
    },
    "category": "Schlagbohrmaschinen",
    "categories": ["Elektrowerkzeuge", "Bohrmaschinen", "Schlagbohrmaschinen"],
    "imageUrls": [
        "https://bilder.obi.at/d431c517-0b7f-46ca-a485-9d7bd07852d4/prZZK/image.jpeg",
        "https://bilder.obi.at/e481a386-1869-4e82-85c3-0aed9d08fce5/prZZK/image.jpeg"
    ]
}
```

A fasteners example — OBI's bread and butter:

```json
{
    "name": "Fischer Universaldübel UX 8 x 50 mm 100 Stück",
    "brand": "Fischer",
    "price": 12.49,
    "currency": "EUR",
    "url": "https://www.obi.at/p/8765432/fischer-universalduebel-ux-8x50",
    "scrapedAt": "2026-09-13T09:13:11.195Z",
    "ean": "4006209770283",
    "productId": "8765432",
    "sku": "8765432",
    "inStock": true,
    "rating": 4.9,
    "reviewCount": 412,
    "description": "Der Fischer Universaldübel UX eignet sich für alle Baustoffe.",
    "specs": {
        "Durchmesser": "8 mm",
        "Länge": "50 mm",
        "Packungsinhalt": "100 Stück",
        "Material": "Nylon"
    },
    "category": "Befestigungstechnik > Dübel > Universaldübel",
    "categories": ["Befestigungstechnik", "Dübel", "Universaldübel"]
}
```

### How much does it cost?

OBI Austria Scraper visits product detail pages for full data, so it uses more compute than API-only scrapers.

| Scenario | Products | Est. cost |
|----------|----------|-----------|
| Quick search | 50 | ~$0.30 |
| Category scan | 200 | ~$0.80 |
| Brand analysis | 500 | ~$1.80 |
| Large export | 1,000 | ~$3.50 |

No residential proxy is required for OBI.at — obi.at has no anti-bot vendor in front of it, so proxy costs stay at the Apify default. Per-result cost estimate is roughly $0.005-0.006 per item at STANDARD tier, plus a small per-run start fee.

Usage cost only settles once a run reports **SUCCEEDED** — reading the dataset mid-run (before the run finishes) undercounts what you'll actually be charged, so check the final run status before comparing cost against your budget.

### Can I integrate?

- **JSON, CSV, Excel** — Direct dataset download
- **Google Sheets** — Automatic sync
- **Webhooks** — Trigger on run completion
- **API** — Programmatic access
- **Zapier / Make** — 5,000+ integrations
- **Amazon S3, Google Cloud Storage** — Cloud export

### Can I use it as an API?

**Python:**

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("studio-amba/obi-at-scraper").call(run_input={
    "searchQuery": "schrauben",
    "maxResults": 100
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"{item['name']} - EUR {item['price']}")
```

**JavaScript:**

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

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });

const run = await client.actor('studio-amba/obi-at-scraper').call({
    searchQuery: 'schrauben',
    maxResults: 100,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### FAQ

**How big is OBI.at's product catalog?**
OBI.at carries tens of thousands of products online, spanning tools, garden, building materials and home fittings. The scraper can handle large exports — just set `maxResults` accordingly and allow time for detail page visits.

**Does this work for OBI in other countries?**
This scraper targets obi.at (Austria) specifically. Germany has its own actor, `obi-scraper`. OBI operates a different Austrian catalogue, currency, and stock system from Germany, so results won't match obi.de one-to-one even for the same product.

**Why does the scraper visit each product page?**
OBI's listing pages show limited data (name, price, image). By visiting each product's detail page, the scraper extracts full technical specifications, descriptions, EAN codes, all images, and accurate stock status. This makes it slower but significantly more data-rich.

**Why is the brand sometimes filled in from a fallback source?**
A number of OBI.at products (observed on Skil, LUX-TOOLS and CMI listings) ship a structured-data block with no `brand` field at all, even though the manufacturer name is shown in the page. The actor falls back to the manufacturer record embedded elsewhere in the page for those products, so brand coverage stays complete instead of silently dropping to an empty string.

**Can I scrape OBI's building materials section?**
Yes. OBI.at has building materials categories: wood, insulation, drywall, and more. Use the category URL for the specific department or search by keyword.

### Limitations

- Targets obi.at (Austria) only
- Visits each product's detail page, so scraping speed is limited by page load times (roughly 1-3 seconds per product)
- Some OBI pages may rely on JavaScript rendering that CheerioCrawler cannot execute — in those cases, listing data falls back to link extraction
- Specs and descriptions vary by product — some items have detailed attribute tables, others have minimal data
- Product card extraction on listing pages depends on OBI's current HTML structure, which may change
- `originalPrice`, `rating` and `reviewCount` are only present when the product is on offer or has reviews — not every product carries these fields

### Other DIY & home improvement scrapers

Cover the full Austrian, German and European DIY market:

- **[OBI.de Scraper](https://apify.com/studio-amba/obi-scraper)** — Germany, the sibling to this actor
- **[Hornbach Austria Scraper](https://apify.com/studio-amba/hornbach-at-scraper)** — Austria, DIY megastore for project builders
- **[Hornbach Scraper](https://apify.com/studio-amba/hornbach-scraper)** — Germany/EU, DIY megastore for project builders
- **[Bauhaus Scraper](https://apify.com/studio-amba/bauhaus-scraper)** — Germany/EU, professional hardware & DIY

### Your feedback

Questions about extraction or missing data fields? Found a bug? Open an issue on the actor's page or reach out through Apify.

### Need this data on a schedule, or a custom version?

We run this scraper as a managed service for businesses: scheduled runs,
deduplication, delta detection, and delivery to your inbox, Google Sheets,
or API — maintenance included. We can also build a custom version with your
exact fields and filters, or combine multiple sources into one feed.

See [studioamba.dev/services](https://studioamba.dev/services/) or email
<hello@studioamba.dev> for a free data sample.
We maintain 300+ European web scrapers and answer within one business day.

# Actor input Schema

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

Search for products by keyword (e.g., 'schrauben', 'bohrmaschine', 'farbe'). Uses obi.at search.

## `categoryUrl` (type: `string`):

An obi.at category page URL to scrape. Example: https://www.obi.at/schrauben/c/1282

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

Maximum number of products to return.

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

Proxy settings for better reliability. Recommended for large scrapes.

## Actor input object example

```json
{
  "searchQuery": "schrauben",
  "maxResults": 100,
  "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": "schrauben",
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/obi-at-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": "schrauben",
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/obi-at-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": "schrauben",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call studio-amba/obi-at-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,studio-amba/obi-at-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/DfeggLQK6IVia4EiE/builds/mVMzBrhqYtepLUR40/openapi.json
