Digikala APIdigikala.com ↗
Access Digikala product data via 3 endpoints: search by keyword, filter by brand/category, get full product details, and pull incredible-offer deals.
What is the Digikala API?
The Digikala API gives developers structured access to Iran's largest e-commerce platform across 3 endpoints. Use get_incredible_offers to pull the daily شگفتانگیز (incredible-offers) deals section with pagination, search_products to query the catalog by keyword with sort, category, and brand filters, and get_product_detail to retrieve complete product data including pricing, variants, images, videos, seller info, and specifications.
curl -X GET 'https://api.parse.bot/scraper/9ae5f9ae-71ec-44e3-990b-b43dab33c609/get_incredible_offers?page=1&max_pages=1' \ -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 digikala-com-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.digikala_product_api import Digikala, Sort, ProductSummary, Product
digikala = Digikala()
# Search for laptops sorted by cheapest
for product in digikala.searches.find(query="laptop", sort=Sort.CHEAPEST, limit=5):
print(product.title_fa, product.price.selling_price, product.price.discount_percent)
# Get full details for the last result
detail = product.details()
print(detail.title_en, detail.brand.title_en, detail.category.code)
for variant in detail.variants:
print(variant.color.title, variant.price.selling_price, variant.seller.title)
# Browse incredible offers
for offer in digikala.offers.list(max_pages=1, limit=10):
print(offer.title_fa, offer.price.is_incredible, offer.price.sold_percentage)
Retrieves products from Digikala's incredible-offers (شگفتانگیز) section. On page 1, includes both running-out deals and daily discounted products plus paginated offers. Subsequent pages return only paginated offers. Each product includes pricing with discount percentage and sold-out percentage.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for paginated results. |
| max_pages | integer | Maximum number of pages to fetch starting from the page parameter. |
{
"type": "object",
"fields": {
"page": "integer — current page number",
"products": "array of product summary objects with id, title_fa, title_en, url, status, image_url, rating, price, seller, warranty, offer_type",
"total_products": "integer — count of products returned"
},
"sample": {
"data": {
"page": 1,
"products": [
{
"id": 21600058,
"url": "/product/dkp-21600058/...",
"price": {
"rrp_price": 17000000,
"is_incredible": true,
"selling_price": 6290000,
"sold_percentage": 80,
"discount_percent": 63
},
"rating": {
"rate": 100,
"count": 1
},
"seller": {
"id": 75698,
"title": "گالری سوسپیرو"
},
"status": "marketable",
"title_en": "",
"title_fa": "ادوپرفیوم زنانه هارلینگن",
"warranty": "گارانتی اصالت و سلامت فیزیکی کالا",
"image_url": "https://dkstatics-public.digikala.com/...",
"offer_type": "running_out"
}
],
"total_products": 36
},
"status": "success"
}
}About the Digikala API
Endpoints and What They Return
The search_products endpoint accepts a required query string (e.g., 'iphone 16', 'laptop') plus optional parameters: page for pagination, sort for ordering results (1=bestselling, 4=cheapest, 7=newest, 20=most visited), category for category filtering (e.g., 'mobile-phone', 'laptop'), and brand_id to restrict results to a specific brand (e.g., '10' for Apple, '2' for Samsung). The response returns total_items, total_pages, and an array of product objects.
Product Detail
get_product_detail takes a numeric product_id (found in product URLs as dkp-{id}) and returns a full data object: brand (with id, title_fa, title_en, code), colors, images, videos, rating (rate and count), status (marketable or not_marketable), category, seo metadata, and the canonical url. This is the endpoint to use when you need complete specs and variant data for a known product.
Incredible-Offers Section
get_incredible_offers extracts the time-limited deals prominently featured on Digikala's homepage. It supports page and max_pages inputs for paginated retrieval and returns a products array alongside total_products. Each product object includes id, title_fa, title_en, url, status, image_url, rating, and price fields covering selling_price, rrp_price, and discount_percent. This makes it straightforward to monitor running-out deals and discount depths without constructing individual product queries.
The Digikala API is a managed, monitored endpoint for digikala.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when digikala.com 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 digikala.com 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?+
- Track daily discount percentages and selling prices in the incredible-offers section for deal aggregator apps.
- Build a price comparison tool by searching a keyword and sorting results by cheapest (
sort=4). - Monitor a brand's full catalog on Digikala by filtering
search_productswith a specificbrand_id. - Populate a product database with Persian and English titles, images, and specs using
get_product_detail. - Detect when a product's
statuschanges frommarketabletonot_marketablefor inventory alerting. - Pull
rating.rateandrating.countacross search results to surface top-rated products in a category. - Extract SEO metadata (
seo.title,seo.description) and canonical URLs for product content pipelines.
| 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 Digikala have an official public developer API?+
What price fields does the incredible-offers endpoint return, and does it include historical pricing?+
get_incredible_offers returns current selling_price, rrp_price (recommended retail price), and discount_percent for each deal product. Historical pricing or price-trend data is not included in the response. The API covers current snapshot pricing only. You can fork it on Parse and revise it to add a price-history tracking layer by storing successive snapshots.Can I retrieve customer reviews and written comments for a product?+
get_product_detail returns rating score and count but does not include individual review text or comment threads. The API covers product specs, images, videos, pricing, variants, and seller info. You can fork it on Parse and revise it to add a reviews endpoint that fetches per-product comment data.How does pagination work across the three endpoints?+
search_products returns total_pages and total_items so you can iterate pages using the page input. get_incredible_offers accepts both page and max_pages inputs, letting you cap how many pages are fetched in a single call. get_product_detail operates on a single product ID and does not paginate.Does the search endpoint return seller-level data or only product-level data?+
search_products response returns product-level objects. Seller information — including seller name, rating, and fulfillment details — is only available in the get_product_detail response. If you need seller data for products surfaced via search, you would follow up with get_product_detail using the returned product IDs.