pricerunner
Search and compare Danish prices on PriceRunner.dk — product search with facet filters (brand, price range, specs), category browsing and sorting, shop offers incl. shipping, price history ("is this a
Files2
View on GitHubSKILL.mdskills/pricerunner/SKILL.md
GitHubPriceRunner.dk
scripts/pricerunner.py wraps PriceRunner's unofficial frontend JSON API (no auth, stdlib Python). Every command prints one line of compact JSON; pipe through jq to trim. Prices are DKK. The API is reverse-engineered from the site's JS and can break without notice — if a command starts returning HTTP 404/400, say so rather than guessing.
PR="python3 <skill-dir>/scripts/pricerunner.py" # substitute the absolute path of this skill directory
$PR <command> -h # full flags per command
Commands
| Command | Use |
|---|---|
search "<q>" |
Free-text search. Returns products, the filters PriceRunner applied, and facets (filter ids + option ids) to refine with. |
categories [REGEX] |
Category tree. Find the cl id for a product type. |
filters CAT |
Every filter id available in a category (PRICE, BRAND, RATING, numeric spec ids…) with type. |
facets CAT ID… |
Option ids + product counts for those filters; ranges get min/max buckets. Pass -f to see counts under current filters. |
list CAT |
Browse a category with filters and sorting. Also returns subcategories. |
offers PRODUCT |
Shop offers, default Danish in-stock new, cheapest incl. shipping first. |
history PRODUCT |
Daily lowest price: current, all-time-in-window low/high/median, currentPercentile (0 = cheapest ever seen), downsampled series. |
info PRODUCT |
Lowest national/international price, review score, pro reviews with pros/cons. |
compare PRODUCT… |
Spec table; by default only rows that differ. |
similar PRODUCT |
Alternatives in the same category. |
deals |
Current price drops. |
PRODUCT accepts a bare id (3216399795), 94-3216399795, or a pricerunner.dk /pl/ URL.
Filters
-f takes ID=VALUE and is repeatable; the af_ prefix is added for you.
- Options (OR within one filter):
-f BRAND=162,1766 - Range:
-f PRICE=500_1500,-f PRICE=_1500(max only),-f PRICE=2000_(min only). Same for numeric spec filters (e.g. battery hours). - Rating:
-f RATING=4_ - In stock only:
-f ONLY_IN_STOCK=true(works inlist;searchignores it)
Filter ids are numeric for specs (e.g. 59671607 = IP-klasse in headphones) and per category — always look them up with filters then facets; never guess option ids.
Category scoping differs by command: search -c 94 or search -c 100003567-100014541 (sub id); list 94 --sub 100003567-100014541.
Workflow
- Vague request ("cheap noise-cancelling earbuds"):
searchfirst. ItsappliedParamsshows what PriceRunner auto-extracted from the query (often anaf_CATEGORY); pass--no-extractif that narrowed wrongly. UsecategoryIdfrom the results for the next steps. - Spec-driven request ("laptop with 32 GB RAM under 10.000 kr"):
categories 'bærbar'→filters 27→facets 27 <ramId> -g 32→list 27 -f <ramId>=<optId> -f PRICE=_10000 -s PRICE_ASC. - "Where do I buy X cheapest?":
offers. Quotetotal(price + shipping), stock and delivery days; mention--internationalifsummary.internationalOffer.minPriceis notably lower. - "Is this a good price / should I wait?":
history -i ONE_YEAR(orTWO_YEARS). Comparecurrentwithlowestandmedian; a lowcurrentPercentilemeans it is near its cheapest. Note seasonal dips (Black Friday, November) visible inseries. - Cheapest-first listings (
-s PRICE_ASC) surface miscategorised junk and one-shop marketplace listings. Set a realisticPRICEminimum and prefer products with severalmerchants, or sort byPOPULARITY/RATINGand filter by price instead. - Choosing between models:
comparefor differing specs,infofor review scores and pro pros/cons.
Present a short answer with product names, prices and pricerunner.dk links — not raw JSON. Offer urls go through Klarna's clickout redirect; prefer linking the product page url from search/list/info.