Migros APImigros.com.tr ↗
Access Migros supermarket product data via API: search products, browse categories, get pricing, discounts, and active campaigns from Migros.com.tr.
What is the Migros API?
The Migros.com.tr API provides 6 endpoints covering the full Migros online supermarket catalog, including product search, category browsing, and promotional campaigns. The get_product_detail endpoint returns extended fields such as nutritional badges, HTML descriptions, availability status, and image sets keyed by size. Together, the endpoints let you retrieve category trees, paginate through product listings, and track active discounts in real time.
No input parameters required.
curl -X GET 'https://api.parse.bot/scraper/25cf60c8-3706-4035-b4e7-6cb4742a8f70/get_categories' \ -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 migros-com-tr-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.
from parse_apis.migros_supermarket_api import Migros, Category, ProductSummary, Product, Campaign
migros = Migros()
# List all categories and browse products in the first one
for cat in migros.categories.list():
print(cat.name, cat.pretty_name, cat.color)
# Construct a category by slug and browse its products
fruits = migros.category("meyve-sebze-c-2")
for product in fruits.products.list(limit=5):
print(product.name, product.shown_price, product.brand)
# Search for products by keyword
for item in migros.productsummaries.search(query="sut", limit=10):
print(item.name, item.sku, item.regular_price)
# Navigate from summary to full detail
for item in migros.productsummaries.search(query="ekmek", limit=3):
detail = item.details()
print(detail.name, detail.description, detail.status, detail.all_categories)
# Get a product directly by SKU
milk = migros.products.get(sku="11011530")
print(milk.name, milk.shown_price, milk.status, milk.all_categories)
# List discounted products
for deal in migros.productsummaries.discounted(limit=5):
print(deal.name, deal.shown_price, deal.discount_rate)
# List active campaigns
for campaign in migros.campaigns.list():
print(campaign.name, campaign.finish_date, campaign.pretty_name)
Retrieve the full category tree of the Migros supermarket. Returns a nested list of categories with their metadata (id, name, pretty_name, images, depth, parent_id, color) and child categories. Each category's pretty_name serves as the slug for browsing products within that category via get_products_by_category.
No input parameters required.
{
"type": "object",
"fields": {
"categories": "array of flattened category objects with id, name, pretty_name, depth, parent_id, color, images, and children"
},
"sample": {
"data": {
"categories": [
{
"id": 20000000072311,
"name": "Tüm İndirimli Ürünler",
"color": "#FFE8E1",
"depth": 1,
"images": [
{
"urls": {
"x1": "https://images.migrosone.com/sanalmarket/category/list/72311/indirim-f3a481.png"
},
"sponsored": false
}
],
"children": [],
"parent_id": 20000000000000,
"pretty_name": "tum-indirimli-urunler-dt-0"
}
]
},
"status": "success"
}
}About the Migros API
Category and Product Browsing
The get_categories endpoint returns the complete Migros category tree as a nested structure. Each node includes fields like id, name, prettyName, depth, parentId, color, and images. The prettyName slug (e.g. meyve-sebze-c-2) is the required category_slug input for get_products_by_category, which returns paginated product arrays with fields including regular_price, shown_price, discount_rate, brand, and unit.
Product Search and Detail
search_products accepts a query string (e.g. sut for milk products) and an optional page integer, and returns matching products alongside total_count and page_count for pagination. To go deeper on any item, pass its sku to get_product_detail, which extends the standard listing fields with an HTML description, badges, a status string such as IN_SALE, and an images object mapping multiple size keys to URLs.
Discounts and Campaigns
get_discounted_products provides a paginated feed of all products currently on promotion, including their discount_rate and both regular_price and shown_price so you can calculate savings directly. get_campaigns returns the active campaign list with each campaign's name, description, prettyName slug, imageUrls, and finishDate as a Unix timestamp in milliseconds — useful for filtering campaigns that are about to expire.
The Migros API is a managed, monitored endpoint for migros.com.tr — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when migros.com.tr 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 migros.com.tr 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 grocery price tracker that monitors
regular_pricevsshown_priceacross product SKUs over time. - Aggregate all discounted items via
get_discounted_productsto surface the highestdiscount_ratedeals in a deals newsletter. - Sync the full Migros category tree using
get_categoriesto power a faceted product search interface. - Monitor
get_campaignsfor upcomingfinishDatevalues to alert users before a promotion ends. - Compare brand presence within a category by paginating
get_products_by_categoryand grouping results by thebrandfield. - Check product availability by querying
get_product_detailfor thestatusfield before placing an order in an automated purchasing workflow. - Build a nutritional database by collecting the
descriptionandbadgesfields fromget_product_detailacross food category SKUs.
| 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 Migros.com.tr have an official public developer API?+
What does `get_product_detail` return beyond what search results provide?+
get_product_detail adds several fields not present in listing endpoints: an HTML description, a badges array (e.g. organic or dietary labels), a status string indicating availability such as IN_SALE, and an images object with multiple size-keyed URLs. The listing endpoints (search_products, get_products_by_category) return the core pricing and identification fields but omit these extended attributes.Does the API expose customer reviews or ratings for products?+
How does pagination work across the product listing endpoints?+
search_products, get_products_by_category, and get_discounted_products endpoints all accept an optional page integer (1-indexed) and return current_page, page_count, and total_count in every response. You can walk all pages by incrementing page until it equals page_count.Is stock level or warehouse inventory data available through this API?+
status string in get_product_detail (e.g. IN_SALE), which indicates general availability but does not include quantity, stock counts, or store-level inventory. You can fork the API on Parse and revise it to add granular inventory data if that endpoint is identified.