morele APImorele.net ↗
Get discounted product listings and the full category directory from morele.net. Access prices, old prices, savings, and 3-month low via 2 endpoints.
What is the morele API?
The morele.net API gives developers access to two endpoints covering discounted product listings and the site's full category directory of roughly 2,100 leaf categories. The get_deals endpoint returns up to 30 discounted products per page for any given category slug, including current price, crossed-out old price, discount percentage, savings amount, and the lowest price from the past 3 months. The list_categories endpoint maps every valid category slug in one round trip.
No input parameters required.
curl -X GET 'https://api.parse.bot/scraper/11eb9f8c-1754-4681-9f25-8e61c9517d55/list_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 morele-net-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: morele.net deals SDK — browse categories and discounted products."""
from parse_apis.morele_net_api import Morele, DealSort, CategoryNotFound
client = Morele()
# Browse the category directory to find a category slug.
for cat in client.categories.list(limit=5):
print(cat.name, cat.department, cat.group)
# Pick the first category and list its discounted products.
cat = client.categories.list(limit=1).first()
if cat is not None:
print(f"\nDeals in {cat.name} (slug: {cat.category}):")
for product in cat.products.list(sort=DealSort.PRICE_ASC, limit=5):
print(
f" {product.name} — {product.price} {product.currency}"
f" (was {product.old_price}, save {product.savings})"
)
# Construct a category directly when you already know the slug.
laptops = client.category(category="laptopy-31")
top_deal = laptops.products.list(sort=DealSort.POPULARITY, limit=1).first()
if top_deal is not None:
print(f"\nMost popular laptop deal: {top_deal.name}")
print(f" Brand: {top_deal.brand}, Merchant: {top_deal.merchant}")
print(f" {top_deal.price} {top_deal.currency} (-{top_deal.discount_percent}%)")
if top_deal.sold_count_90_days is not None:
print(f" Sold last 90 days: {top_deal.sold_count_90_days}")
# Handle an unknown category gracefully.
try:
bogus = client.category(category="nonexistent-999")
bogus.products.list(limit=1).first()
except CategoryNotFound:
print("\nCategory not found — check the slug against categories.list().")
print("\nexercised: categories.list / category().products.list / CategoryNotFound")
Returns the full directory of leaf product categories on morele.net (about 2,100 entries) in one round trip, each with its department and category group. The `category` value of each entry is the slug accepted by get_deals. No pagination; the whole directory is returned at once. Returns an empty list only if the store publishes no categories.
No input parameters required.
{
"type": "object",
"fields": {
"categories": "array of category entries: category (slug used by get_deals), name, group, department, url",
"total_count": "number of categories returned"
},
"sample": {
"data": {
"categories": [
{
"url": "https://www.morele.net/kategoria/akcesoria-komputerowe-674/",
"name": "Akcesoria komputerowe",
"group": "Akcesoria i zasilanie",
"category": "akcesoria-komputerowe-674",
"department": "Komputery"
}
],
"total_count": 2108
},
"status": "success"
}
}About the morele API
Category Directory
The list_categories endpoint returns the complete flat list of product categories on morele.net — approximately 2,100 entries — in a single response with no pagination. Each entry includes a category slug (e.g. laptopy-31), a human-readable name, a group, a department, and a url. The category field from this response is the required input to get_deals, so querying list_categories first is the standard starting point for any pipeline that needs to iterate across the catalogue.
Discounted Product Listings
The get_deals endpoint returns products currently listed under morele.net's "Produkty z obniżoną ceną" (reduced price) filter for a single category. You supply the required category slug, an optional 1-based page integer, and an optional sort string matching the store's sort menu. The response delivers up to 30 products per page and includes total_count, total_pages, and has_more fields to drive pagination.
Per-Product Fields
Each entry in the products array carries: product_id, name, brand, url, image_url, price (current sale price), old_price (the crossed-out reference price), discount_percent (the badge value the store displays), savings (the computed price difference), and lowest_price_3 (the lowest recorded price over the preceding 3 months, in line with EU Omnibus Directive requirements). category_name in the response confirms the display name for the queried category.
The morele API is a managed, monitored endpoint for morele.net — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when morele.net 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 morele.net 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 discount depth across electronics categories by comparing
priceagainstold_priceandlowest_price_3. - Build a price-drop alert system by polling
get_dealsperiodically and flagging products wherediscount_percentexceeds a threshold. - Aggregate the
list_categoriesdirectory to map morele.net's product taxonomy for catalogue research. - Identify brands that appear most frequently in discounted listings by grouping
get_dealsresults bybrand. - Compare
old_pricevslowest_price_3to detect whether a marked-down price is genuinely at a historical low. - Compile a cross-category snapshot of all current deals by iterating
get_dealsover every category slug fromlist_categories.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does morele.net have an official developer API?+
What does `lowest_price_3` represent and why is it included?+
lowest_price_3 is the lowest price the product carried in the 30 days prior to the promotion, as displayed by morele.net in compliance with the EU Omnibus Directive. It lets you verify whether the current price is actually below the recent historical floor, not just below an inflated old_price.Does `get_deals` return all products in a category, or only discounted ones?+
get_deals returns only products that morele.net is currently listing under its reduced-price filter. Full-price products in the same category are not included in the response. The API covers list_categories for navigation and get_deals for discounted-only inventory. You can fork it on Parse and revise to add a full-catalogue product listing endpoint.Are product reviews or ratings available through the API?+
products array includes pricing, discount, and identity fields (product_id, name, brand, url, image_url) but no review counts or rating scores. You can fork the API on Parse and revise it to add an endpoint that returns review data for individual products.How does pagination work in `get_deals`?+
total_pages, total_count, and a boolean has_more field. Pass the next integer to the page parameter to advance through the listing. Page numbers are 1-based.