Brazil Court Scraper - Lawyer Caseloads & Case Tracking
Pricing
Pay per event
Brazil Court Scraper - Lawyer Caseloads & Case Tracking
Track Brazilian court cases three ways: by a lawyer's OAB registration, by process number, or by case-law keyword. Returns parties, counsel with OAB, procedural class, judging body, filing date and dated movements. Built for tracking active and ongoing cases, including matters with no ruling yet.
Pricing
Pay per event
Rating
0.0
(0)
Developer
BowTiedRaccoon
Maintained by CommunityActor stats
0
Bookmarked
31
Total users
7
Monthly active users
13 hours ago
Last modified
Share
Brazil Court Scraper — Lawyer Caseloads, Process Tracking & Case Law
Track Brazilian litigation three ways from one actor:
- By lawyer — give a bar registration (OAB) and get every case tied to it, with parties, opposing counsel, procedural class and full dated movement history.
- By process number — give one or many CNJ numbers and get each case's capa, parties and complete movement log.
- By keyword — search published case law and get the ementa and acórdão text.
The first two are built for tracking active and ongoing cases, including first-instance matters that have no published ruling yet.
Features
- Lawyer caseload lookup — one OAB registration in, that lawyer's whole current caseload out. Submit a list of registrations and cap the run with
maxItems. - Real movement history — every procedural movement with its code, name and timestamp, in order. Long-running cases routinely return hundreds of movements.
- Parties and counsel — party names with their side (plaintiff / defendant), and each lawyer with their OAB registration and state.
- Ongoing cases included — a case does not need a published decision to show up.
- Multi-value inputs — several registrations or several process numbers in a single run.
- Deduplicated by case — a case appearing many times across the record collapses to one row, so
maxItemscounts distinct cases, not repeats. - Case-law search — keyword search over published decisions, with full ementa and acórdão text and a court filter.
Who Uses This?
- Legal SaaS & litigation platforms — onboard a lawyer or firm and monitor their docket for new movements
- Law firms & paralegals — watch your own caseload, or an opposing counsel's, without manual court-by-court checks
- Legal researchers & analysts — build datasets of cases, parties, counsel and procedural timelines
- Legal-tech / NLP developers — train on Brazilian court language over real decisions and movement text
Input
Fill one of the three. Precedence: oab → processNumber → searchQuery.
All three are lists — add as many entries as you need.
Lawyer caseload
{"oab": ["183919/SP", "226005/SP", "5555/MG"],"maxItems": 200}
Formats accepted per entry: 183919/SP, OAB 183919/SP, OAB/SP 183919, SP183919.
Process lookup
{"processNumber": ["0016711-76.2009.8.26.0451", "1011305-91.2019.8.26.0100"],"maxItems": 50}
Masked (0016711-76.2009.8.26.0451) and unmasked (00167117620098260451) both work.
Case-law keyword search
{"searchQuery": ["responsabilidade civil", "habeas corpus"],"courts": ["STJ", "TJSP"],"maxItems": 10}
Each query × court pair runs as its own search, so the example above runs four. maxItems caps the combined total. Leaving courts empty runs one search per query across all courts.
| Field | Type | Default | Description |
|---|---|---|---|
oab | array | — | Bar registrations. Selects the lawyer-caseload lookup. |
processNumber | array | — | CNJ process numbers. Selects the process lookup. |
searchQuery | array | ["responsabilidade civil"] | Keywords for published case law, one search per entry. |
courts | array | [] (all courts) | Applies to the keyword search only. Pick any of 90 courts — the superior courts, all 27 state courts (TJ), the 6 federal regional courts (TRF), all 24 labour courts (TRT), the electoral courts (TRE) and the state military courts. |
maxItems | integer | 10 | Maximum number of distinct cases to return. |
Only one lookup runs per run. If more than one is filled, precedence is oab → processNumber → searchQuery, and the run log states which mode was selected and which inputs it did not read.
Brazilian exits are required to reach the court sources and are handled for you — there is nothing to configure.
Output
One record per case. Example from a lawyer lookup (real result, trimmed):
{"process_number": "0016711-76.2009.8.26.0451","court": "TJSP","state": "SP","instance": "1st","procedural_class": "Cumprimento de sentença","judging_body": "04 CIVEL DE PIRACICABA","filed_at": "2009-06-17","subjects": ["Cheque"],"parties": [{ "name": "INSTITUTO EDUCACIONAL PIRACICABANO DA IGREJA METODISTA", "role": "plaintiff" },{ "name": "PAULO JORGE ALVES DE CARVALHO", "role": "defendant" }],"lawyers": [{ "name": "MAX FERNANDO PAVANELLO", "oab": "183919", "oab_uf": "SP" }],"movements": [{ "code": 26, "name": "Distribuição", "at": "2009-06-18T15:52:06.000Z" },{ "code": 11385, "name": "Execução/Cumprimento de Sentença Iniciada", "at": "2025-07-17T15:36:58.000Z" }],"last_movement": "Expedição de documento","last_movement_at": "2026-03-28T10:47:44.000Z","last_publication_at": "2026-07-24","matched_oab": ["183919/SP"],"source_type": "advogado"}
| Field | Type | Description |
|---|---|---|
process_number | string | CNJ process number |
court | string | Court sigla handling the case (e.g. TJSP, TRT2) |
court_name | string | Full court name |
state | string | State abbreviation, for state courts |
instance | string | 1st, 2nd, or superior |
procedural_class | string | Procedural class (e.g. Cumprimento de sentença) |
judging_body | string | Court division or panel hearing the case |
filed_at | string | Filing date (YYYY-MM-DD) |
subjects | array | Legal subjects assigned to the case |
parties | array | { name, role } — role is plaintiff or defendant |
lawyers | array | { name, oab, oab_uf } |
movements | array | { code, name, at } in chronological order |
last_movement / last_movement_at | string | Most recent movement and its timestamp |
publications | array | { at, type, body } court publications for the case |
last_publication_at | string | Date of the most recent publication |
matched_oab | array | Which queried registrations this case matched |
subject, status, decisions, appeals, related_processes, process_url | — | Filled by the keyword case-law search |
source_type | string | advogado, processo, or jurisprudencia |
scraped_at | string | ISO 8601 collection timestamp |
Fields a given lookup cannot legitimately source come back empty rather than guessed.
Coverage
Lawyer caseload. "A lawyer's cases" means cases where that registration appears on the official court record. Coverage is complete going forward from mid-2025 and patchy before it, so this is excellent for onboarding a lawyer and monitoring their docket from that point on — it will not reconstruct a decade of dormant history. A brand-new case appears once it first reaches the record.
Sealed cases. Cases under seal are excluded, and party names the court has masked stay masked exactly as the court published them.
Case-law search. Returns the decision text (ementa / acórdão), court, procedural class, instance and judging body. Parties and movements are not part of this lookup — use the lawyer or process lookup for those.
🔍 FAQ
Can I really get parties, lawyers and movements now?
Yes — through the lawyer and process lookups. You get party names with their side, counsel with OAB registration, and the full dated movement log. This is the litigation-tracking capability, not a preview of it.
Can I submit a list of lawyers or processes?
Yes — oab, processNumber and searchQuery are all lists. maxItems caps the records returned across the whole run, not the number of entries you submit.
What if I fill in more than one lookup?
Only one runs. Precedence is oab → processNumber → searchQuery, so an OAB lookup wins over everything. The run log names the selected mode and lists the inputs it did not read, so nothing is dropped silently. To get two lookups, run them separately.
Does the court filter apply to the lawyer and process lookups?
No — courts narrows the keyword case-law search only. A lawyer lookup returns that registration's cases across every court, which is normally what you want; filter the output afterwards if you need one court. The run log states which inputs the selected lookup does not read, so this is never silent.
How many courts can I filter by?
90 — the superior courts, all 27 state courts, the 6 federal regional courts, all 24 labour courts, the electoral courts and the state military courts. Every one was individually checked to confirm it actually narrows results; the handful that did not are deliberately not offered, because a filter that silently does nothing is worse than no filter.
Does maxItems count duplicates?
No. Cases are deduplicated before the cap, so maxItems: 50 means 50 distinct cases.
Why do some cases come back with no movements?
Because the court has not published a movement log for them — most often a case under seal. You still get whatever the record legitimately shows, and empty rather than invented values for the rest.
Can I search by a party's name instead of a lawyer's?
No. Lookups are keyed to bar registration and process number by design.
How is it priced?
Pay-per-event: a small per-run start fee plus a per-record fee for each case returned. You pay for cases delivered.
Need More?
Need additional courts, more case fields, or a specific litigation-monitoring workflow? File an issue or get in touch.
Why Use It?
- Actual case tracking — parties, counsel and dated movements, including cases with no ruling yet
- Whole-caseload lookup — one bar registration returns the lawyer's docket, not a single case at a time
- Honest output — every field is sourced from a record that can actually supply it; nothing is inferred to fill a column
Further reading: How to Get Court Records and Trademark Data in Bulk