Ejari APIejari.sa ↗
Access Ejari's Saudi monthly-rent blog posts and FAQ content via 3 endpoints. Retrieve post metadata, full structured content, and Q&A pairs in English or Arabic.
What is the Ejari API?
The Ejari.sa API provides 3 endpoints to retrieve blog content and FAQ data from Ejari, a licensed Saudi monthly-rent platform. Use list_blog_posts to fetch all published posts with titles, dates, read times, and images in a single call, then use get_blog_post with a slug to retrieve fully structured article content including headings, paragraphs, lists, tables, and blockquotes. All endpoints support both English and Arabic via a language parameter.
curl -X GET 'https://api.parse.bot/scraper/77aa3bad-3922-46b9-8bbc-5e8afc82f8e4/list_blog_posts?language=en' \ -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 ejari-sa-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: Ejari Blog & FAQ SDK — bounded, re-runnable."""
from parse_apis.ejari_sa_api import Ejari, Language, PostNotFound
client = Ejari()
# List blog post summaries (capped to 5 items).
for summary in client.post_summaries.list(language=Language.EN, limit=5):
print(summary.title, "|", summary.date_published)
# Drill into the first post's full content via summary -> detail navigation.
post_summary = client.post_summaries.list(limit=1).first()
if post_summary is not None:
post = post_summary.details()
print(post.title)
print("Author:", post.author)
print("Headings:", post.headings[:3])
for section in post.content[:3]:
print(f" [{section.type}] {section.text[:100]}")
# Direct point-lookup by slug discovered from the listing above.
if post_summary is not None:
try:
detail = client.posts.get(slug=post_summary.slug)
print(detail.description)
except PostNotFound:
print("Post was removed or slug is invalid.")
# Browse FAQs.
for faq in client.faqs.list(limit=3):
print(faq.question, "—", faq.answer[:80])
print("exercised: post_summaries.list / details / posts.get / faqs.list")
List all blog posts from Ejari's blog with metadata including title, date, read time, and image. Returns the complete set of published posts in one call; no pagination.
| Param | Type | Description |
|---|---|---|
| language | string | Content language. |
{
"type": "object",
"fields": {
"posts": "array of blog post summary objects",
"total": "integer count of posts"
},
"sample": {
"data": {
"posts": [
{
"url": "https://ejari.sa/en/blog/breaking-a-lease-saudi-arabia",
"slug": "breaking-a-lease-saudi-arabia",
"title": "Breaking a Lease in Saudi Arabia: Your Rights and What It Really Costs",
"image_url": "https://ejari.sa/blog/images/breaking-a-lease-saudi-arabia.webp",
"read_time": "11 min read",
"date_published": "Jun 7, 2026"
}
],
"total": 19
},
"status": "success"
}
}About the Ejari API
Blog Post Discovery and Full Content
list_blog_posts returns the complete set of published Ejari blog posts in one call — no pagination required. Each summary object includes the post title, publication date, estimated read time, and a thumbnail image URL, giving you enough metadata to build an index or feed. Pass the optional language parameter to get results in either English or Arabic.
Once you have a slug from list_blog_posts, pass it to get_blog_post to retrieve the full article. The response includes a structured content array where each element carries a type field (heading, paragraph, list, table, or blockquote), making it straightforward to render or parse without stripping raw HTML. Additional fields include author, description, image_url, date_published, date_modified, and a headings array that effectively serves as a table of contents.
FAQ Retrieval
get_faqs returns all Q&A pairs from Ejari's FAQ page in a single response. Each object in the faqs array contains a question and an answer string. A total integer field tells you how many items were returned. Like the blog endpoints, this endpoint accepts the language parameter for Arabic or English output.
Language Support
All three endpoints accept an optional language input, reflecting the bilingual nature of the Ejari platform. Content availability may vary between languages depending on what Ejari has published on each localized version of the site.
The Ejari API is a managed, monitored endpoint for ejari.sa — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when ejari.sa 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 ejari.sa 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?+
- Syndicating Ejari's Arabic and English rental advice articles to a property management portal
- Building a bilingual FAQ widget for a Saudi rental app using structured Q&A pairs from
get_faqs - Generating a content index of Ejari blog posts using title, date, and read-time metadata from
list_blog_posts - Extracting structured article sections (headings, lists, tables) from
get_blog_postto feed a knowledge base - Monitoring
date_modifiedanddate_publishedfields to detect newly updated Ejari blog content - Populating a Saudi real-estate chatbot with Ejari's FAQ answers and blog summaries
| 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 Ejari offer an official developer API?+
What does `get_blog_post` return beyond the article text?+
content array of typed sections, the response includes author, title, description, image_url, slug, canonical url, date_published, date_modified, and a headings array listing all heading strings for use as a table of contents.Does `list_blog_posts` support filtering by category, tag, or date range?+
language parameter. You can fork this API on Parse and revise it to add filtering or sorting logic over the returned set.Is property listing data — such as available rentals, prices, or unit details — accessible through this API?+
Are blog posts returned with pagination, or all at once?+
list_blog_posts returns the complete set of published posts in a single response with a total count. There are no page or offset parameters.