JORADP Scraper (joradp.dz) avatar

JORADP Scraper (joradp.dz)

Pricing

from $0.47 / 1,000 results

Go to Apify Store
JORADP Scraper (joradp.dz)

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

Hamza Abbad

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

19 hours ago

Last modified

Categories

Security

Limited permissions

Share

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 parentTextId and relation — the part that makes a legal corpus usable.
  • Either edition, cleanly. One edition per run — Arabic or French — with a language field on every row, so two runs combine without ambiguity.
  • Analysis-ready. Consistent field names, ISO dates next to the dates as printed, and a reference string 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:

SurfaceWhat a run gives youWhat it is for
Text rowsnature, number, signature date, issuing authority, JO issue and page, the official abstract, and a PDF link that opens at that pagea citation you can defend
Relationsfor every text, the ones that repeal, amend, implement or approve it, plus its rectifications — as linked rows carrying parentTextId and relationlegal history, not a bare list
Issuesevery Journal issue with its own PDFarchive completeness
EditionsArabic or French, one edition per runa corpus in the language you work in

Quick start

  1. Click Try actor.
  2. Choose what to collect in What to scrape (startMode).
  3. Add a keyword or another filter (search mode needs at least one).
  4. Click Start.
  5. 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)DescriptionDefault
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)DescriptionDefault
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)DescriptionDefault
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)DescriptionDefault
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)DescriptionDefault
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 getKey fields
Search (search)The texts matching your filters, with their relationstextId, 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 itSame fields, plus query.year
Issues (issues)One row per issue of the Journalyear, number, dateIso, issuePdfUrl
ColumnWhat it holds
languagear or fr: which edition the row comes from.
textIdThe Journal's identifier for the text, e.g. 000154.
titleThe heading as published, e.g. مرسوم رقم 82-05 ممضي في 02 يناير 1982.
type / numberNature of the text and its own number, split out of the heading.
signatureDate / signatureDateIsoSignature date as printed, and as YYYY-MM-DD.
ministryThe issuing authority.
abstractThe summary the Journal prints under the heading.
flaggedAmendedThe Journal's own marker that the text carries amendments.
joThe Journal reference: year, issue, date, dateIso, page.
referenceThe same reference as one line, e.g. JO 1982-1, page 27.
pageUrlOpens the PDF at the page of the text (or the single-page PDF for older issues).
issuePdfUrl / issueIndexUrlThe whole issue's PDF, or the page index for issues older than 1994.
depth0 for a text that matched the query, 1+ for a related text.
relation / relationLabelHow a related text relates to its parent, in English keys and as published.
parentTextIdThe text a related row hangs under.
queryWhich run and filters produced the row.
scrapedAtWhen the row was collected.

Issue row (recordType: "issue")

ColumnWhat it holds
languagear or fr.
year / numberThe issue's year and number.
dateIsoPublication date, YYYY-MM-DD.
issuePdfUrlThe issue's PDF.
scrapedAtWhen the row was collected.

Relation values

relationArabicFrench
repealed_byملغى بـAbrogé par
amended_byمعدل بـModifié par
implementingنص تطبيقيTexte(s) d'application
approved_byموافق عليه بـApprouvé par
corrigendumاستدراك فيRectificatif au
otherany 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: 0 when 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, signatureDateIso or jo.dateIso is null instead of a converted date, and the printed date stays available in signatureDate / 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.
  • pageSize above 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 null in 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.