ICA APIica.se ↗
Access ICA.se store data via API: retrieve store locations, contact info, opening hours, services, and current national weekly offers across all ICA stores.
What is the ICA API?
The ICA.se API provides 3 endpoints covering Swedish ICA grocery store data, including store contact details, opening hours, and national weekly deals. The list_stores endpoint returns paginated results with fields like storeName, phoneNumber, emailAddress, address, openingHours, and services for every ICA location in the network. The get_national_offers endpoint delivers current promotional deals with pricing, validity dates, and product EAN codes.
curl -X GET 'https://api.parse.bot/scraper/aed99d34-6c53-4ce9-a5bb-3ff1e5566620/list_stores?skip=0&take=5' \ -H 'X-API-Key: $PARSE_API_KEY'
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 ica-se-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: ICA.se SDK — store discovery and weekly offers."""
from parse_apis.ica_se_api import Ica, StoreNotFound
client = Ica()
# List stores with pagination; limit= caps total items fetched.
for store in client.storesummaries.list(take=5, limit=5):
print(store.store_name, store.profile, store.store_id)
# Take the first store summary, then drill into its full detail.
summary = client.storesummaries.list(take=1, limit=1).first()
if summary:
detail = summary.details()
print(detail.name, detail.visiting_address, detail.visiting_city)
print(detail.has_home_delivery, detail.has_pickup)
# Construct a store summary by known ID and fetch its detail directly.
try:
known = client.storesummary(store_id="2527").details()
print(known.name, known.phone_number)
except StoreNotFound as exc:
print(f"Store not found: {exc}")
# Browse current national weekly offers.
for offer in client.offers.list(limit=3):
print(offer.description, offer.discount_value, offer.valid_to)
print("exercised: storesummaries.list / summary.details / storesummary().details / offers.list")
Retrieve a paginated list of all ICA stores with basic info including store name, email address, phone number, address, opening hours, and services. Paginated via skip/take; each page returns up to `take` stores sorted alphabetically. The total catalog is ~1300 stores.
| Param | Type | Description |
|---|---|---|
| skip | integer | Number of stores to skip for pagination. |
| take | integer | Number of stores to return per page. |
{
"type": "object",
"fields": {
"data": "array of store summary objects with storeName, profile, phoneNumber, emailAddress, address, openingHours, services, storeId, accountNumber"
}
}About the ICA API
Store Directory
The list_stores endpoint returns a paginated array of ICA store objects. Pagination is controlled via skip and take integer parameters, letting you walk through the full store catalog in chunks. Each store object includes storeName, storeId, accountNumber, phoneNumber, emailAddress, address, openingHours, and services. The storeId values returned here are the identifiers you pass into get_store_info.
Detailed Store Lookup
get_store_info accepts a comma-separated list of numeric store IDs (e.g. '2527,1235') and returns an extended store record for each. The response includes a stores array and an errorMessages array. Store records at this level add visiting address details, opening hour deviations (such as holiday adjustments), per-service opening hours, and store-specific URLs — fields not present in the basic list_stores response.
National Weekly Offers
get_national_offers takes no input parameters and returns the current set of national promotional deals active across ICA stores. Each offer object includes id, description, validFrom, validTo, category, details, discountValue, and one or more product EAN codes for cross-referencing against product catalogs. Offers are scoped nationally — they represent deals available broadly, not store-specific promotions.
The ICA API is a managed, monitored endpoint for ica.se — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when ica.se changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official ica.se API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a store locator showing ICA locations with addresses and phone numbers pulled from
list_stores - Display weekly grocery deals in a meal-planning app using
validFrom,validTo, anddiscountValuefromget_national_offers - Sync ICA store opening hours into a calendar or scheduling tool using the
openingHoursand deviation fields fromget_store_info - Map available services per store location using the
servicesfield returned bylist_stores - Cross-reference national offer EAN codes against a product database to match discounted products
- Alert users to active promotions by monitoring
get_national_offersfor new entries or changedvalidFromdates - Build an internal ops dashboard showing contact details and opening hours for all ICA stores via
accountNumberandemailAddress
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does ICA have an official public developer API?+
What does `get_store_info` return that `list_stores` does not?+
get_store_info adds opening hour deviations (e.g. holiday closures), per-service opening hours, visiting address breakdowns, and store-specific URLs. The basic list_stores endpoint returns general address and hours without those granular fields. You can query multiple stores in one call by passing a comma-separated string of storeId values.Are store-specific or local offers available through the API?+
get_national_offers, which reflect promotions available across all ICA stores. Store-level or regional promotions are not exposed. You can fork this API on Parse and revise it to add an endpoint targeting store-specific offer data.Can I filter `get_national_offers` by category or product EAN?+
category field and product EAN codes, so filtering can be done client-side after fetching the full result set. You can fork this API on Parse and revise it to add server-side filtering parameters.Is there a limit to how many stores `list_stores` returns per call?+
skip and take parameters for pagination, so you control how many stores are returned per request and where in the list to start. There is no documented maximum for take, but fetching the full directory in pages is the intended pattern to avoid oversized responses.