Brazilian Property Auction Scraper avatar

Brazilian Property Auction Scraper

Pricing

from $0.90 / 1,000 property returneds

Go to Apify Store
Brazilian Property Auction Scraper

Brazilian Property Auction Scraper

Judicial and extrajudicial property auctions across Brazil. Minimum bid, appraisal, discount, both praça dates with their own minimum bids, auction house, selling bank, occupancy, areas, court case reference, and the matrícula and edital PDFs. Filter by state, city, auction type and price.

Pricing

from $0.90 / 1,000 property returneds

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

17 hours ago

Last modified

Share

Judicial and extrajudicial property auctions across Brazil, as rows you can sort. You get the minimum bid, the appraisal the discount is calculated from, both auction rounds with their dates and their own minimum bids, the auction house running it, whether the place is occupied, and direct links to the matrícula and the edital PDFs.

One aggregator sits behind this, the one that carries the private auction houses and the bank portfolios in a single index: around 31,000 live listings on the day this was written, of which 13,700 are judicial or extrajudicial and about 18,700 are not Caixa stock. Counts read off the portal's own filter panel on 19 September 2026.

The awkward parts, before the feature list

A single search will not return more than about 969 properties. The portal serves 19 per page and stops answering after page 51, whatever number it prints at the top. Ask for 5,000 rows from one wide query and you will get 969 and a warning in the log saying so. The way past it is to split the run: by state, by city, by property type, by price band. This actor already splits by state for you when you name states. That ceiling is the portal's, not ours, and nothing on our side can lift it.

Names are deliberately missing. Auction notices are written by the auction houses and they name people: the debtor, sometimes the creditor, sometimes the owner mid-sentence with no label at all. We read the seller's free-text notes for the case number, the court, the district and the registry number, and then we throw the prose away. There is no description field and there will not be one. Every string that does go out is checked against a personal-data pattern list before it is written, and anything that trips it is dropped with a warning in the log.

Caixa is in here, but this is not the Caixa actor. The aggregator indexes Caixa's stock alongside everything else, so the four Caixa sale types are available as filters. If Caixa is all you want, read it from Caixa directly. That source carries paperwork this one does not (ofício, inscrição imobiliária, the averbação line, Caixa's own edital and item numbers).

Auction dates move. A property whose first round is a week away can be pulled, settled or re-scheduled without notice. Treat a row as true at scrapedAt and no later.

What a row looks like

A real judicial listing, exactly as it came back:

{
"propertyId": "3020681",
"listingUrl": "https://www.leilaoimovel.com.br/imovel/sp/sao-paulo/residencial-apartamento-desocupado-de-92-83-m-no-condominio-parque-marajoara-sol-jardim-marajoara-sao-paulo-desocupado-imovel-3020681",
"state": "SP",
"city": "São Paulo",
"neighbourhood": "Jardim Marajoara",
"street": "Av. Interlagos",
"addressFull": "Avenida Interlagos, 492- Apartamento nº 12",
"propertyType": "Apartamento",
"auctionCategory": "Judicial",
"auctionHouse": "Máximo Leilões",
"occupancyStatus": "Desocupado",
"appraisedValueBrl": 720592.07,
"minimumBidBrl": 360296.03,
"discountPercent": 50,
"rounds": [
{ "round": 1, "startsAt": "2026-09-17T16:00:00", "minimumBidBrl": 720592.07 },
{ "round": 2, "startsAt": "2026-10-07T16:00:00", "minimumBidBrl": 360296.03 }
],
"auctionDate": "2026-10-07T16:00:00",
"auctionEndsAt": "2026-10-07T16:00:00",
"totalAreaSqm": null,
"privateAreaSqm": 92.83,
"bedrooms": null,
"garageSpaces": 1,
"paymentTerms": "Somente à vista",
"courtCaseNumber": "4000053-82.2015.8.26.0002",
"court": "1ª Vara Cível do Foro Regional de Santo Amaro",
"judicialDistrict": "Capital",
"registrationNumber": "216.352 - 216.453",
"registryOffice": null,
"deedPdfUrl": "https://d24y7usudqxuz0.cloudfront.net/bens/0000000100/matricula-vaga-6a6bb212e3299.pdf",
"noticePdfUrl": "https://d24y7usudqxuz0.cloudfront.net/bens/0000000100/edital-6a70f62388f40.pdf",
"photoUrls": ["https://image.leilaoimovel.com.br/images/81/apartamento-em-sao-paulo-sp-3020681-…-g.webp"],
"listedAt": "2026-09-17",
"geoPrecision": "Localização Precisa",
"isNewListing": true,
"scrapedAt": "2026-09-20T03:47:57.000Z"
}

rounds is the field the rest of this exists for. A Brazilian judicial auction runs in two praças: the first at or near the appraisal, the second (usually a couple of weeks later) at a fraction of it. minimumBidBrl at the top of the row is the price that is live right now; the array tells you what each round asks and when it opens.

Every field

FieldWhat it holds
propertyId, listingUrlthe portal's own code, and the page it came from
state, city, neighbourhood, street, addressFulllocation, broken out and as printed
propertyTypeApartamento, Casa, Terreno, Área rural, Comercial, Galpão, Garagem and the rest
auctionCategoryJudicial, Extrajudicial, Venda Direta, Comprei PGFN, Particular, Outro, or one of the four Caixa types
auctionHousethe firm running the sale
occupancyStatusDesocupado / Ocupado, where the notice states it
appraisedValueBrl, minimumBidBrl, discountPercentthe appraisal, the live minimum bid, and the gap between them
rounds[]one entry per praça: round, startsAt, minimumBidBrl
auctionDatethe next round still ahead; falls back to the closing date
auctionEndsAtwhen the listing closes
totalAreaSqm, privateAreaSqmwhichever the notice gives
bedrooms, garageSpaceswhere stated
paymentTerms"Somente à vista", instalments, and so on
courtCaseNumber, court, judicialDistrictthe proceeding behind a judicial auction
registrationNumber, registryOfficematrícula and ofício where the notice prints them
deedPdfUrl, noticePdfUrlthe matrícula and the edital, as links. The files are not downloaded
photoUrlslisting photos, up to 30
listedAt, isNewListing, geoPrecisionwhen it appeared, whether it is new, how exact the geocode is
scrapedAtwhen this row was read

A field that the notice does not state comes back null. It is never guessed.

Input

{
"auctionCategories": ["judicial", "extrajudicial"],
"states": ["SP", "RJ"],
"propertyTypes": ["apartamento", "casa"],
"minDiscountPercent": 40,
"maxPriceBrl": 400000,
"sortBy": "discount-desc",
"maxItems": 200
}

Everything is optional except that you have to give at least one filter, or paste property URLs. An empty run writes a single sample row, free, showing you the shape.

  • auctionCategories: judicial, extrajudicial, venda-direta, comprei-pgfn, particular, outro, plus caixa-leilao-sfi, caixa-licitacao-aberta, caixa-venda-online, caixa-compra-direta.
  • states: two-letter codes. Each one is searched separately, which is also how you get more than 969 rows out of a wide query.
  • cities: municipality names. Accents and case do not matter. Setting cities drops the state filter, because the cities already pin the location. A city the portal does not list comes back as a diagnostic row naming it rather than silently vanishing.
  • sellerInstitutions: Caixa, Banco do Brasil, Santander, Itaú, Bradesco, Inter, BRB, BTG, BV, Safra, Sicoob, Porto Seguro, Embracon, Emgea, Assefaz, Reverts.
  • propertyTypes, paymentOptions, keyword, minPriceBrl, maxPriceBrl, minDiscountPercent, auctionBefore (YYYY-MM-DD).
  • sortBy: decides which end of the list you get when your search is bigger than maxItems. Cheapest first, biggest discount first, closing soonest first, newest listings first.
  • includeAuctionDetails: on by default. Off reads the results list only: you keep the price, appraisal, discount, address, type and closing date, and you lose the rounds, the auction house, the areas and the PDFs. It is several times faster. Both settings cost the same per property.
  • propertyUrls: paste listing pages to re-read specific properties.
  • maxItems: hard cap. You are charged per property returned.

Pricing

Pay per property returned, plus a small fee per run. Sample rows and diagnostic rows are free. If a search matches nothing, if a city is not listed, if a property has been withdrawn, or if the portal refuses the run, you are told why and charged nothing for it. Rows your own minDiscountPercent or maxPriceBrl drop are not charged either.

includeAuctionDetails: false costs the same per property as leaving it on, so turn it off for speed, not to save money.

Speed, measured

From real runs on 20 September 2026:

RunRowsTime
Judicial, SC, list only67.6 s
Judicial + extrajudicial, RJ1410.1 s
Judicial + extrajudicial, MG6040.1 s
Same, list only6023.5 s
Judicial + extrajudicial, SP10093.7 s
Judicial + extrajudicial, SP100112.6 s
Judicial + extrajudicial, BA120105.8 s

So roughly 0.7 to 1.1 s per property with the pages open, and about 0.4 s without.

Those are good days. The portal is slower from some networks than others, and a run that lands on a bad one can take three times as long for the same rows. It still returns everything; it just takes longer. Nothing about that changes what you are charged, which is per property either way.

What this does not do

  • No more than ~969 rows from one query. Covered above. Split by state or city.
  • No seller prose. No description field, for the reason in the second section.
  • No PDF contents. You get the matrícula and edital links; parsing them is your side.
  • No bid history and no live bid amounts. Fixed-price online sales show a running bid on the portal; this returns the listed minimum, not the current high bid.
  • No logins, no accounts, no saved searches. Everything here is what a logged-out visitor sees.
  • bedrooms and totalAreaSqm are frequently null on judicial listings, because the notice simply does not state them. Private-sale listings fill more of the fields.
  • Coverage is one aggregator's index. A small auction house that does not syndicate to it will not appear, however real its auctions are.
  • Nothing here is legal or investment advice. An edital and a current matrícula decide what you are actually buying; a row in a dataset does not.

FAQ

What is the difference between a judicial and an extrajudicial auction? A judicial auction is ordered by a court inside a case, and the row carries the case number, the court and the district. An extrajudicial one is run by a creditor, usually a bank enforcing a mortgage, outside court under the alienação fiduciária rules. Both appear here; filter with auctionCategories.

What are 1ª and 2ª praça? The two rounds of a judicial auction. The first opens at or near the appraised value. If nobody bids, the second opens days or weeks later at a much lower minimum, which is where the large discounts in this data come from. Both are in rounds, each with its own date and minimum bid.

How is discountPercent calculated? It is the portal's own figure: how far the live minimum bid sits below appraisedValueBrl. It is not recomputed here, so it always matches what a buyer sees on the page.

Can I get every auction in Brazil in one run? Not from one query; see the 969-row ceiling. Name all 27 states and the actor runs one search per state, which raises the reachable total accordingly.

Does it return Caixa properties? Yes, through the four Caixa filters. For Caixa alone, its own source carries more of the paperwork.

Why is there no owner or debtor name? Because auction notices carry them and we strip them. See the second section.

Do I need an account or an API key anywhere? No. Nothing here needs a login.

How fresh is the data? Each row is read live when the run executes; scrapedAt records the moment. Auction dates and prices can change after that.