Discover/Rema1000 API
live

Rema1000 APIshop.rema1000.dk

Search for groceries across REMA 1000's Danish product catalog by keyword or department, and browse the complete list of departments and their categories. Find exactly what you need from the supermarket's inventory with flexible search options.

Endpoint health
monitored
list_departments
search_products
Checks pendingself-healing
Endpoints
2
Updated
3h ago
Try it
Page number for pagination (1-based).
Sort order for results. Use '-popularity' for most popular first, 'name' for alphabetical, '-name' for reverse alphabetical.
Search query string to match product names and descriptions.
Number of products per page, between 1 and 100.
Department ID to filter products. Obtain from list_departments endpoint (e.g. 10, 20, 60).
api.parse.bot/scraper/11d09981-ac4a-47b3-8665-e8b9744b0f72/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/11d09981-ac4a-47b3-8665-e8b9744b0f72/search_products?page=1&sort=-popularity&query=m%C3%A6lk&per_page=5' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

Typed, relational, agent-ready

A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.

  • Fully typed · autocompletes
  • Objects link to objects
  • Typed errors & pagination

Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:

uv add parse-sdk
uv run parse init
uv run parse add --marketplace shop-rema1000-dk-api

uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.

"""Walkthrough: REMA 1000 product catalog — browse departments, search products."""
from parse_apis.shop_rema1000_dk_api import Rema1000, Sort, InvalidInput

client = Rema1000()

# List all departments and their categories
for dept in client.departments.list(limit=5):
    print(dept.name, f"({len(dept.categories)} categories)")

# Get one department and browse its products sorted by name
dept = client.departments.list(limit=1).first()
if dept:
    for product in dept.products(sort=Sort.NAME_ASC, limit=3):
        print(product.name, product.price, product.compare_unit)

# Search products within a department by keyword, sorted by popularity
dept = client.departments.list(limit=1).first()
if dept:
    for product in dept.products(query="mælk", sort=Sort.POPULARITY_DESC, limit=3):
        print(product.name, product.price, product.labels)

# Handle invalid input errors
try:
    for p in dept.products(query="test", limit=1):
        print(p.name)
except InvalidInput as exc:
    print(f"Invalid input: {exc}")

print("exercised: departments.list / department.products (browse + search + sort enum)")
All endpoints · 2 totalmissing one? ·

Search and list REMA 1000 products by keyword, optionally filtered by department. Results are sorted by popularity by default. When query is empty and a department_id is provided, returns all products in that department. Results are paginated with up to 100 items per page.

Input
ParamTypeDescription
pageintegerPage number for pagination (1-based).
sortstringSort order for results. Use '-popularity' for most popular first, 'name' for alphabetical, '-name' for reverse alphabetical.
querystringSearch query string to match product names and descriptions.
per_pageintegerNumber of products per page, between 1 and 100.
department_idstringDepartment ID to filter products. Obtain from list_departments endpoint (e.g. 10, 20, 60).
Response
{
  "type": "object",
  "fields": {
    "page": "integer",
    "total": "integer",
    "per_page": "integer",
    "products": "array of product objects with id, name, underline, department, category, price, labels, image_url, etc."
  },
  "sample": {
    "data": {
      "page": 1,
      "total": 5,
      "per_page": 5,
      "products": [
        {
          "id": 21464,
          "name": "MINIMÆLK 0,4% FEDT",
          "price": 10.5,
          "labels": [
            "REMA1000",
            "Nøglehul",
            "Dansk"
          ],
          "barcodes": [
            "5705830610065"
          ],
          "category": "Mælk m.v.",
          "image_url": "https://rema-product-images.digital.rema1000.dk/21464/1-large-AKqeJxY9p1.webp",
          "underline": "1 LTR. / REMA 1000",
          "department": "Mejeri",
          "category_id": 6050,
          "declaration": "<b>MINIMÆLK</b>",
          "description": null,
          "is_campaign": false,
          "compare_unit": "ltr",
          "department_id": 60,
          "is_advertised": false,
          "temperature_zone": "refrigerated_5_degrees_celsius",
          "compare_unit_price": 10.5,
          "is_available_in_all_stores": true
        }
      ]
    },
    "status": "success"
  }
}

About the Rema1000 API

The Rema1000 API on Parse exposes 2 endpoints for the publicly available data on shop.rema1000.dk. Calls return JSON over HTTPS and are billed per successful response.

Pin a release with the API-Snapshot-Version header so canonical updates don't silently change your contract.