- name
- geizhals-at
- description
- Search Geizhals.at (Austria) with HTTP-only autocomplete + detail-page parsing (no browser automation). Use when users want quick price checks from Geizhals.at and accept unofficial/best-effort scraping limits.
geizhals-at
Geizhals-only lookup skill (Austria) using plain HTTP.
Behavior
- Query Geizhals autocomplete endpoint (
/acs) for product candidates. - Fetch top candidate detail pages.
- Extract:
- min_price_eur - shop - offer_count - price_confidence + price_source
- Return stable JSON records with
schema_version.
Constraints
- No browser automation.
- No JS execution.
- Unofficial integration: HTML patterns can change and break extraction.
- Keep request volume low.
Usage
Run commands from the geizhals-at skill directory.
uv first:
uv run scripts/geizhals.py search "iphone 15" --limit 5JSON output:
uv run scripts/geizhals.py search "mac mini" --limit 5 --jsonDebug + explicit cache dir:
uv run scripts/geizhals.py search "bosch akkuschrauber" --limit 5 --json --debug --cache-dir /tmp/geizhals-cacheFallback without uv:
python3 scripts/geizhals.py search "iphone 15" --limit 5Output contract
Each result includes:
schema_version(currently1.0)namedetail_urlmin_price_eur(nullable)shop(nullable)offer_count(nullable)price_confidence:high|medium|low|unknownprice_source:embedded_offer_raw_price|meta_product_price|title_ab_price|noneerror(nullable)
Testing
Run parser tests from the skill directory:
uv run --with pytest python -m pytest tests/test_parsers.pyFallback:
python3 -m pytest tests/test_parsers.pyFixtures live in tests/fixtures/.
Known limitations
- Results are Geizhals-only by design.
- Some products may miss a shop or exact cheapest offer if page structure changes.
- If Geizhals rate-limits, the script retries with exponential backoff but can still fail.