JORADP Scraper (joradp.dz)
Pricing
from $0.47 / 1,000 results
JORADP Scraper (joradp.dz)
Extract Algeria's Journal Officiel: legal texts with nature, number, signature date, ministry, JO issue and page, plus the texts that repeal, amend, implement or approve each one. Search, whole archive or issue calendar, in the Arabic or the French edition.
Pricing
from $0.47 / 1,000 results
Rating
0.0
(0)
Developer
Hamza Abbad
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
19 hours ago
Last modified
Security
Limited permissionsShare
JORADP Scraper
Collect Algeria's Journal Officiel (Journal Officiel de la République Algérienne Démocratique et Populaire, الجريدة الرسمية) — the gazette where every law, decree, order and ministerial decision is published. Search the legal archive, harvest the whole thing year by year, or list the issues themselves. Results land in a dataset ready to export as CSV, Excel or JSON.
What you can scrape
- Legal texts matching a search — laws, ordonnances, decrees, arrêtés, decisions and more, each with its nature, number, signature date, issuing authority, the issue and page it was published at, and the official abstract.
- How texts connect — for every text, the ones that repeal, amend, implement or approve it, and the rectifications that correct it. These arrive as extra rows linked to the text they belong to, so a search returns the legal history, not just a list.
- The whole archive — every published text, year by year, from 1962 to today.
- The issue calendar — every issue of the Journal with its publication date and a link to its PDF.
Each run collects one edition: the Arabic edition (الجريدة الرسمية) or the French one. They are separate publications with their own text numbering and their own PDFs, so run the Actor once per edition when you need both.
Why this Actor
- Every row can be cited. Each text gives its Journal issue, publication date, page and a link that opens the PDF at exactly that page.
- The relations come with the texts. Repeals, amendments, implementing texts and approvals are collected alongside the text they affect, linked by
parentTextIdandrelation— the part that makes a legal corpus usable. - Either edition, cleanly. One edition per run — Arabic or French — with a
languagefield on every row, so two runs combine without ambiguity. - Analysis-ready. Consistent field names, ISO dates next to the dates as printed, and a
referencestring you can drop straight into a citation. - Cheap and fast. No PDF is downloaded: the Actor collects metadata and links, so a large run stays small.
- No login required. The Journal is public; no account or cookie is needed.
Where it goes beyond a list of laws
A search returns the texts that match. The value is in what travels with each one:
| Surface | What a run gives you | What it is for |
|---|---|---|
| Text rows | nature, number, signature date, issuing authority, JO issue and page, the official abstract, and a PDF link that opens at that page | a citation you can defend |
| Relations | for every text, the ones that repeal, amend, implement or approve it, plus its rectifications — as linked rows carrying parentTextId and relation | legal history, not a bare list |
| Issues | every Journal issue with its own PDF | archive completeness |
| Editions | Arabic or French, one edition per run | a corpus in the language you work in |
Quick start
- Click Try actor.
- Choose what to collect in What to scrape (
startMode). - Add a keyword or another filter (search mode needs at least one).
- Click Start.
- Open the Dataset tab and pick the Legal texts or Journal issues view.
Texts about the government secretariat, Arabic edition:
{ "startMode": "search", "language": "ar", "keywords": "أمانة عامة للحكومة" }
Every law published in 2024, French edition:
{ "startMode": "bulk", "language": "fr", "yearFrom": 2024, "yearTo": 2024, "nature": "Loi" }
The 2024 issues, with their PDFs:
{ "startMode": "issues", "yearFrom": 2024, "yearTo": 2024 }
Tutorial: a real workflow
Say you need everything Algeria published in 2024 on public security, and you want to know what happened to each text afterwards.
1. Search the Arabic edition for the sector
{"startMode": "search","language": "ar","sector": "الأمن العمومي","joDateFrom": "01/01/2024","joDateTo": "31/12/2024"}
Each matching text comes back with its nature, number, signature date, issuing authority, abstract and Journal page.
2. Read the relations
Below each match you get rows with depth 1 or more. A row with relation: "repealed_by" is the text that repealed it, "amended_by" amended it, "implementing" implements it, "approved_by" approved it, and "corrigendum" corrects it. parentTextId points at the text the row hangs under, so the tree survives the export to a spreadsheet.
3. Widen to the full year
Swap to bulk mode with the same sector to collect every text of 2024 in that sector, not just the ones that matched a keyword:
{ "startMode": "bulk", "language": "ar", "yearFrom": 2024, "yearTo": 2024, "sector": "الأمن العمومي" }
4. Collect the French edition
Set language to fr and run the same query again. The French rows carry the same fields with the French headings (Décret exécutif n° 93-182 du 27 Juillet 1993) and their own text IDs, and they land in their own dataset.
Input
See the input tab for the full configuration options.
Main input
Label (key) | Description | Default |
|---|---|---|
What to scrape (startMode) | search for texts matching filters, bulk for the archive year by year, issues for the issue calendar. | search |
Edition (language) | ar for the Arabic edition (الجريدة الرسمية), fr for the French one. One edition per run. | ar |
Search filters
Used in search mode, and combined with each year in bulk mode.
Label (key) | Description | Default |
|---|---|---|
Keywords (keywords) | A phrase from the Journal's keyword index, written as usual: أمانة عامة للحكومة. | — |
Sector (sector) | Sector of activity, e.g. الأمن العمومي, AFFAIRES ETRANGERES. | — |
Issuing authority (ministry) | The ministry or authority that issued the text. | — |
Nature of the text (nature) | قانون, مرسوم تنفيذي, أمر, Loi, Décret exécutif, Arrêté… | — |
Issue number (joNumber) | One issue of the Journal; needs a date range around it. | — |
Text number (textNumber) | The text's own number, e.g. 97-74. | — |
Published from / to (joDateFrom, joDateTo) | Publication date range of the Journal, dd/mm/yyyy. | — |
Signed from / to (textDateFrom, textDateTo) | Signature date range of the texts, dd/mm/yyyy. | — |
Filters are checked against the lists the Journal publishes, so a misspelled sector or authority is reported instead of quietly returning nothing.
Year window
Required in bulk and issues modes: those runs collect a range of years, so there is no default to fall back on. Search mode filters by date instead and ignores both fields.
Label (key) | Description | Default |
|---|---|---|
First year (yearFrom) | Required in bulk and issues modes; ignored in search mode. The archive starts in 1962. | — |
Last year (yearTo) | Required in bulk and issues modes; ignored in search mode. Use the same year as First year for a single year. | — |
Output & debugging
Label (key) | Description | Default |
|---|---|---|
Include related texts (includeRelations) | Emit the texts that repeal, amend, implement, approve or rectify each match. Turn it off to keep only the texts that matched. | true |
Include PDF links (includeLinks) | Add pageUrl, issuePdfUrl and issueIndexUrl to every row. No PDF file is downloaded. | true |
Limits & performance
Label (key) | Description | Default |
|---|---|---|
Maximum rows (maxItems) | Maximum rows for the whole run. 0 = no cap. | 0 |
Maximum pages per query (maxPagesPerQuery) | Stop each query after this many result pages. 0 = page to the end. | 0 |
Texts per page (pageSize) | How many texts the Journal returns per page (1–99). Larger pages are slower per request. | 20 |
Parallel sessions (maxConcurrency) | How many queries run at the same time. | 3 |
Delay between pages (requestDelayMs) | Pause between two pages of the same query, in milliseconds. | 700 |
Retries per request (maxRequestRetries) | Retries before a request is given up on. | 4 |
Output
One dataset per run. Every row carries a recordType — "legalText" for a text, "issue" for an issue of the Journal. Switch between the Legal texts and Journal issues views in the Dataset tab, and download as JSON, HTML, CSV or Excel.
Modes at a glance
Mode (startMode) | What you get | Key fields |
|---|---|---|
Search (search) | The texts matching your filters, with their relations | textId, title, type, number, signatureDateIso, ministry, abstract, jo, pageUrl, relation, parentTextId |
Bulk (bulk) | The same rows for a range of years, the whole archive if you want it | Same fields, plus query.year |
Issues (issues) | One row per issue of the Journal | year, number, dateIso, issuePdfUrl |
Legal text row (recordType: "legalText")
| Column | What it holds |
|---|---|
language | ar or fr: which edition the row comes from. |
textId | The Journal's identifier for the text, e.g. 000154. |
title | The heading as published, e.g. مرسوم رقم 82-05 ممضي في 02 يناير 1982. |
type / number | Nature of the text and its own number, split out of the heading. |
signatureDate / signatureDateIso | Signature date as printed, and as YYYY-MM-DD. |
ministry | The issuing authority. |
abstract | The summary the Journal prints under the heading. |
flaggedAmended | The Journal's own marker that the text carries amendments. |
jo | The Journal reference: year, issue, date, dateIso, page. |
reference | The same reference as one line, e.g. JO 1982-1, page 27. |
pageUrl | Opens the PDF at the page of the text (or the single-page PDF for older issues). |
issuePdfUrl / issueIndexUrl | The whole issue's PDF, or the page index for issues older than 1994. |
depth | 0 for a text that matched the query, 1+ for a related text. |
relation / relationLabel | How a related text relates to its parent, in English keys and as published. |
parentTextId | The text a related row hangs under. |
query | Which run and filters produced the row. |
scrapedAt | When the row was collected. |
Issue row (recordType: "issue")
| Column | What it holds |
|---|---|
language | ar or fr. |
year / number | The issue's year and number. |
dateIso | Publication date, YYYY-MM-DD. |
issuePdfUrl | The issue's PDF. |
scrapedAt | When the row was collected. |
Relation values
relation | Arabic | French |
|---|---|---|
repealed_by | ملغى بـ | Abrogé par |
amended_by | معدل بـ | Modifié par |
implementing | نص تطبيقي | Texte(s) d'application |
approved_by | موافق عليه بـ | Approuvé par |
corrigendum | استدراك في | Rectificatif au |
other | any other label the Journal introduces | — |
Example rows
{"recordType": "legalText","language": "ar","textId": "000154","title": "مرسوم رقم 82-05 ممضي في 02 يناير 1982","type": "مرسوم","number": "82-05","signatureDate": "02 يناير 1982","signatureDateIso": "1982-01-02","ministry": "وزارة السكن والعمران","abstract": "يتضمن تطبيق الفقرة الثالثة من المادة 3 من القانون رقم 81-01 ...","flaggedAmended": true,"jo": { "year": 1982, "issue": 1, "date": "05 يناير 1982", "dateIso": "1982-01-05", "page": 27 },"reference": "الجريدة الرسمية 1982-1، الصفحة 27","pageUrl": "https://www.joradp.dz/Jo6283/1982/001/Ap27.pdf","issuePdfUrl": null,"issueIndexUrl": "https://www.joradp.dz/Jo6283/1982/001/A_Pag1.htm","depth": 0,"relation": null,"parentTextId": null,"query": { "mode": "search", "query": "keywords=دولة", "year": null },"scrapedAt": "2026-11-01T20:00:00.000Z"}
{"recordType": "issue","language": "ar","year": 2024,"number": 1,"dateIso": "2024-01-06","issuePdfUrl": "https://www.joradp.dz/FTP/jo-arabe/2024/A2024001.pdf","scrapedAt": "2026-11-01T20:00:00.000Z"}
Notes and limits
- Related texts can fall outside your date filter. A 2024 text repealed by a 2025 ordinance is still listed under the 2024 match, with its own 2025 issue. Filter on
depth: 0when you want only the texts that matched the query. - One edition per run. Arabic and French texts are different publications: the same law has a different
textId, and often a different page, in each. Run the Actor once per edition if you need both. - Keywords are looked up in the Journal's keyword index, not searched as free text. A phrase that reads like a subject (
أمانة عامة للحكومة) finds its texts; unrelated words strung together (دولة محروقات) find nothing, even though each word exists on its own. - Some dates have no ISO form. When the Journal prints a date in the Hijri calendar,
signatureDateIsoorjo.dateIsoisnullinstead of a converted date, and the printed date stays available insignatureDate/jo.date. - Bulk makes one query per year, so a wide year window is a longer run. Narrow the sector or nature to cut it down, or raise
maxConcurrency. pageSizeabove the default costs more per request. The Journal takes noticeably longer to render 99 texts than 20; the default keeps runs responsive.- Links only, no PDF files. The Actor collects metadata and URLs; download the PDFs you need from the links.
- Fields that do not apply to a row type are
nullin that row.
FAQ
How do I find one specific text?
Use search mode with textNumber (the text's own number, e.g. 97-74) or joNumber together with a date range around that issue.
Why do I get rows with depth above 0?
Those are the texts the Journal links to a match — the ones that repeal, amend, implement, approve or rectify it. Turn off Include related texts to keep only the matches.
How do I get both editions?
Run the Actor twice, once with language set to ar and once to fr. Each run produces its own dataset.
Can I read the text itself?
The Journal publishes the official text as PDF. Each row's pageUrl opens that PDF at the right page, and issuePdfUrl gives the whole issue.
How much data does a bulk run return?
A recent year holds roughly 1,000–1,300 texts per edition before relations, so expect more rows than texts. Set maxItems or a narrower year window to bound a run.
Does the Actor need a login? No. The Journal is public.
Contact
Bug reports, feature requests, or a custom scraper for a site not yet covered? Open an issue on the Actor's Apify Console page or message the maintainer directly there.