Permit data file · $79 one-time · checkout via Gumroad

A real pull of the Miami reroof file

This is the actual deliverable, not a mock-up: every reroof permit 16 from City of Miami + 123 from Miami-Dade County published to their open-data feeds in our 2026-09-12 pull, filtered to the ones a solar installer would call. The issue dates on these records run 2026-09-07 to 2026-09-11 — the authorities publish days after they issue, and by how much is measured below. 25 rows are shown out of the 137 that passed this file's roofing selection, drawn from the 139 rows in that pull. 2 of those 139 rows were removed by that selection and by de-duplication, with the per-rule counts listed further down this page. The 25 are allocated to hold the pull's own residential/commercial mix rather than being simply the largest jobs. The evidence column is the exact rule that matched, so you can check why each row is here.

Permit #Declared valueContractor of recordIssued Evidence — the rule that matched AddressWorkState licencePhoneOwner of record Status at source
2026070815$3,000,000BUCKNER ROOFING LLC2026-09-11matched /\broof(?!.*solar)/ in "BLDG NEW ROOF INSTALL — BANKS - AUTOMATIC TELLER"6420 BIRD RD, MiamiroofingCCC1334407
Cert Roofing
•••-••96 withheld from the paid file — free on the county’s own recordBOOS BIRD ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
2026070497$422,804C L BURKS CONSTRUCTION - COMMERCIAL RO2026-09-10matched /\broof(?!.*solar)/ in "BLDG ROOF RECOVER — WAREHOUSE/STORAGE"10800 NW 92 TER, MiamiroofingCCC1326350
Cert Roofing
•••-••63 withheld from the paid file — free on the county’s own recordBPREP 10800 ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
2026070499$399,500C L BURKS CONSTRUCTION - COMMERCIAL RO2026-09-10matched /re-?roof/ in "BLDG FLAT RE-ROOF — WAREHOUSE/STORAGE" | matched /\broof(?!.*solar)/ in "BLDG FLAT RE-ROOF — WAREHOUSE/STORAGE"10810 NW 92 TER, MiamiroofingCCC1326350
Cert Roofing
•••-••63 withheld from the paid file — free on the county’s own recordBPREP 10800 ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
BD22030713049BR001$384,500A & E BROTHERS ROOFING2026-09-09matched /\broof(?!.*solar)/ in "NEW CONSTRUCTION FLAT ROOF — Commercial"560 NE 34 ST, Miamiroofingnot published by City of Miaminot published in the City of Miami open-data layer — that layer has no phone fieldnot published in the City of Miami open-data layer — that layer has no owner fieldActive · final: NO
2026070140$300,000HEIGHTS ROOFING INC2026-09-08matched /re-?roof/ in "BLDG REROOF TILES — SINGLE FAM RES-CLUST-ZERO LOT-TOWN HOUSE"16890 SW 276 ST, MiamiroofingCCC1329156
Cert Roofing
•••-••63 withheld from the paid file — free on the county’s own recordMONTEAGUDO REV ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
2026070794$255,000ASSURANCE PROPERTY SERVICES GROUP INC2026-09-11matched /\broof(?!.*solar)/ in "MBLD TPO ROOF — APT BUILDING 3-4 UNITS"7650 W 8 AVE, MiamiroofingCCC1329735
Cert Roofing
•••-••37 withheld from the paid file — free on the county’s own recordHHA I ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
2026070851$175,000S&B QUALITY ROOFING LLC2026-09-11matched /\broof(?!.*solar)/ in "BLDG TILE ROOF — SINGLE FAM RES-CLUST-ZERO LOT-TOWN HOUSE" | matched /\btile roof/ in "BLDG TILE ROOF — SINGLE FAM RES-CLUST-ZER23033 SW 114 CT, MiamiroofingCCC1337113
Cert Roofing
•••-••84 withheld from the paid file — free on the county’s own recordKTC PROPERTIES ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
2026070850$175,000S&B QUALITY ROOFING LLC2026-09-11matched /\broof(?!.*solar)/ in "BLDG TILE ROOF — SINGLE FAM RES-CLUST-ZERO LOT-TOWN HOUSE" | matched /\btile roof/ in "BLDG TILE ROOF — SINGLE FAM RES-CLUST-ZER11432 SW 231 LN, MiamiroofingCCC1337113
Cert Roofing
•••-••84 withheld from the paid file — free on the county’s own recordKTC PROPERTIES ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
2026070951$140,000A.Q. INSPECTION AND REPAIR INC2026-09-11matched /\broof(?!.*solar)/ in "BLDG ROOF METALEST HOUSE — SINGLE FAM RES-CLUST-ZERO LOT-TOWN HOUSE"20551 SW 226 ST, MiamiroofingCCC058019
Cert Roofing
•••-••11 withheld from the paid file — free on the county’s own recordFRANK CABRERA ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
2026070042$100,000S&S ROOFING CORPORATION2026-09-08matched /\broof(?!.*solar)/ in "BLDG NEW FLAT ROOFCHED — SINGLE FAM RES-CLUST-ZERO LOT-TOWN HOUSE"17000 NW 85 CT, MiamiroofingCCC1332780
Cert Roofing
•••-••93 withheld from the paid file — free on the county’s own recordLUIS FAUSTO ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
2026070661$79,980T & E ROOFING INC2026-09-10matched /re-?roof/ in "BLDG RE-ROOF — SINGLE FAM RES-CLUST-ZERO LOT-TOWN HOUSE" | matched /\broof(?!.*solar)/ in "BLDG RE-ROOF — SINGLE FAM RES-CLUST-ZERO LOT-T80 SW 123 AVE, MiamiroofingCCC1332944
Cert Roofing
•••-••52 withheld from the paid file — free on the county’s own recordMARCOS ACOSTA ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
2026069863$67,475VICTORIA ROOFING INCORPORATED2026-09-07matched /\broof(?!.*solar)/ in "BLDG SFR TILE ROOF — PAVING/OPEN LOTS"17499 SW 287 ST, MiamiroofingCCC056844
Cert Roofing
•••-••23 withheld from the paid file — free on the county’s own recordTPG AG ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
2026070164$61,500PREMIER IMPACT WINDOWS & ROOFING LLC2026-09-08matched /\broof(?!.*solar)/ in "BLDG TILE RE ROOF — SINGLE FAM RES-CLUST-ZERO LOT-TOWN HOUSE"19661 SW 137 AVE, MiamiroofingCCC1337541
Cert Roofing
•••-••37 withheld from the paid file — free on the county’s own recordLAKEISHA AXEM ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
2026069905$53,500T & S ROOFING SYSTEMS INC2026-09-08matched /re-?roof/ in "BLDG RE-ROOF — SINGLE FAM RES-CLUST-ZERO LOT-TOWN HOUSE" | matched /\broof(?!.*solar)/ in "BLDG RE-ROOF — SINGLE FAM RES-CLUST-ZERO LOT-T6400 SW 79 CT, MiamiroofingCCC1326032
Cert Roofing
•••-••54 withheld from the paid file — free on the county’s own recordMARIA FANTI ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
2026070078$49,500ROOFING KING CONSTRUCTION INC2026-09-08matched /re-?roof/ in "BLDG RE-ROOF — SINGLE FAM RES-CLUST-ZERO LOT-TOWN HOUSE" | matched /\broof(?!.*solar)/ in "BLDG RE-ROOF — SINGLE FAM RES-CLUST-ZERO LOT-T150 SW 136 AVE, MiamiroofingCCC1333031
Cert Roofing
•••-••42 withheld from the paid file — free on the county’s own recordEVERARDO P ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
2026070090$48,595PERKINS ROOFING CORPORATION2026-09-08matched /\broof(?!.*solar)/ in "BLDG RE ROOF METAL — SINGLE FAM RES-CLUST-ZERO LOT-TOWN HOUSE"14362 SW 159 CT, MiamiroofingCCC1331944
Cert Roofing
•••-••21 withheld from the paid file — free on the county’s own recordARMAND A ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
2026070996$47,790FOREVER ROOFING AND REMODELING LLC2026-09-11matched /\broof(?!.*solar)/ in "BLDG METAL ROOF — SINGLE FAM RES-CLUST-ZERO LOT-TOWN HOUSE"11530 SW 99 ST, MiamiroofingCCC1333555
Cert Roofing
•••-••56 withheld from the paid file — free on the county’s own recordALICIA BOWMAN ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
2026070828$44,550ROOFING BY ASP CORP2026-09-11matched /re-?roof/ in "BLDG RE-ROOF — SINGLE FAM RES-CLUST-ZERO LOT-TOWN HOUSE" | matched /\broof(?!.*solar)/ in "BLDG RE-ROOF — SINGLE FAM RES-CLUST-ZERO LOT-T8884 NW 179 LN, MiamiroofingCCC1333787
Cert Roofing
•••-••14 withheld from the paid file — free on the county’s own recordJERRY LANTIGUA ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
2026070555$43,952CITY ROOFING AND CONSTRUCTION INC DBA:2026-09-10matched /\broof(?!.*solar)/ in "BLDG RE ROOF — SINGLE FAM RES-CLUST-ZERO LOT-TOWN HOUSE"13461 SW 122 AVE, MiamiroofingCCC1327381
Cert Roofing
•••-••94 withheld from the paid file — free on the county’s own recordSAIN AGUIRRE ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
2026070876$43,260MAG MULTISERVICES & REPAIRS INC2026-09-11matched /re-?roof/ in "BLDG METAL REROOF — SINGLE FAM RES-CLUST-ZERO LOT-TOWN HOUSE"3200 SW 124 CT, MiamiroofingCCC1336193
Cert Roofing
•••-••76 withheld from the paid file — free on the county’s own recordGERARDO IGLESIAS ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
2026070894$40,000MARTINEZ ROOFING CORP2026-09-11matched /re-?roof/ in "BLDG RE-ROOF — SINGLE FAM RES-CLUST-ZERO LOT-TOWN HOUSE" | matched /\broof(?!.*solar)/ in "BLDG RE-ROOF — SINGLE FAM RES-CLUST-ZERO LOT-T6000 SW 153 COURT RD, MiamiroofingCCC1332076
Cert Roofing
•••-••62 withheld from the paid file — free on the county’s own recordRAUL ANGEL ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
2026070508$38,000G&R ROOFING LLC2026-09-10matched /re-?roof/ in "BLDG RE-ROOF — SINGLE FAM RES-CLUST-ZERO LOT-TOWN HOUSE" | matched /\broof(?!.*solar)/ in "BLDG RE-ROOF — SINGLE FAM RES-CLUST-ZERO LOT-T12545 SW 31 TER, MiamiroofingCCC1333166
Cert Roofing
•••-••16 withheld from the paid file — free on the county’s own recordGLADYS JIMENEZ ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
2026069922$38,000M. ROMERO'S ROOFING & INSPECTIONS INC2026-09-08matched /re-?roof/ in "BLDG REROOF — SINGLE FAM RES-CLUST-ZERO LOT-TOWN HOUSE"7713 SW 128 PL, MiamiroofingCCC044016
Cert Roofing
•••-••04 withheld from the paid file — free on the county’s own recordJUAN E ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
2026069961$35,505STORM PROS ROOFING & IMPACT, LLC2026-09-08matched /re-?roof/ in "BLDG REROOF — SINGLE FAM RES-CLUST-ZERO LOT-TOWN HOUSE"17901 NW 82 CT, MiamiroofingCCC1336792
Cert Roofing
•••-••24 withheld from the paid file — free on the county’s own recordJESSICA SAN ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
2026070718$35,000ROOFING EXPERTS SERVICES INC2026-09-10matched /re-?roof/ in "BLDG REROOF — SINGLE FAM RES-CLUST-ZERO LOT-TOWN HOUSE"10005 SW 161 PL, MiamiroofingCCC1331656
Cert Roofing
•••-••93 withheld from the paid file — free on the county’s own recordMICHAEL DELGADO ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
Mix, so you can see this sample is not cherry-picked. The full 139-row pull is 114 residential, 18 commercial, 4 multifamily, 3 unknown. The 137 rows that passed this file's roofing selection are 112 residential, 18 commercial, 4 multifamily, 3 unknown. The 25 shown below are 20 residential, 3 commercial, 1 unknown, 1 multifamily — the 25 slots are allocated in proportion to that mix, highest declared value first within each class, not simply the 25 largest jobs. Until 2026-07-30 they were the 25 largest, which made a file that is mostly houses look mostly like warehouses.

How fresh this actually is

Freshness is a property of the publisher, not of our cron. Each authority posts issued permits on its own delay, so no single sentence is true of both metros at once. Measured from our own daily pulls:
  • City of Miami — the newest issue date it had published to us on the 2026-09-12 run was 2026-09-11 (1 day behind that run; 1–2 days across the last 10 runs)
  • Miami-Dade County — the newest issue date it had published to us on the 2026-09-12 run was 2026-09-11 (1 day behind that run; 1–4 days across the last 10 runs)
  • City of Orlando (other metro, shown for comparison) — the newest issue date it had published to us on the 2026-09-12 run was 2026-09-12 (0 days behind that run; 0–1 days across the last 10 runs)

The file on this page (2026-09-12 run) brought 55 permit numbers that were not in the previous run, out of 139 rows in the file.

Each nightly run re-pulls a rolling seven-day window, so consecutive files overlap heavily: a file is a snapshot, not a day's news. Measured over the 2026-09-05→2026-09-12 runs of this exact file, a run brought 0–55 permit numbers that were not in the previous run (median 13), and 3 of 7 runs brought none at all. That is the real refresh rate of this product, and the median is not a promise about any single day.

Orlando is the fast one; Miami-Dade is not. If you need same-week Miami issue dates, this file cannot give them to you, because the county has not published them at the moment we pull.

Why not just download it from the county?

A fair question, and the answer is not the one a lead-list vendor usually gives. Miami-Dade's free open-data layer already carries the contractor's phone, the contractor's state licence number and the owner of record. We queried the live layer on 2026-09-12 before writing this: those fields are there, they are free, and anyone can query them. What is not in that free download is in the last column below.
FieldMiami-Dade free layerCity of Miami free layerThis file
Permit #, address, work description, contractor name yesyesyes
Declared value (this page ranks by it) yes, where the applicant declared one yes, where the applicant declared one 100 of 139 rows in this pull — the rest were filed without a declared value at source, and we publish them blank rather than estimating one
Contractor phoneyes, free no phone field exists in that layer deliberately not included — we do not sell personal contact details. The county half of this pull carried one on 123 of 139 rows; the county’s own free layer is where to get it
Owner of recordyes, free no owner field exists in that layer deliberately not included — we do not sell personal contact details. The county half of this pull carried one on 123 of 139 rows; the county’s own free layer is where to get it
State licence number, and its classnumber yes — class, no not published number as published, plus the DBPR class decoded from its prefix
Two authorities in one file, one schema county onlycity only 16 from City of Miami + 123 from Miami-Dade County, merged
Parcel year built and building square footage no — a separate parcel layer (ParcelsView), joined on the folio no 128 and 128 of 139 rows, joined on the folio printed on the permit — roof age and roof area, the two fields a roofing or solar crew qualifies on. The folio ships in the file so you can check the join against the county's own parcel search.
Residential vs commercial vs multifamily, per row nono 136 of 139 rows classified residential, commercial or multifamily — the column that lets you not call the warehouses. The remaining 3 carry the literal value unknown: the classifier could not decide and says so instead of guessing.
Permit square footageas publishedas published 122 of 139 rows, carried through as published
Trade classification, with the matching rule shown per row no — unclassified, county-wideno every row
What changed since the previous pullnono computed every run and published above — the count for this exact file is in “How fresh this actually is”. The delta rows themselves are not downloadable yet: there is no subscriber file-delivery URL on this site, so nothing here is offered as a file you receive.
Measured publisher lag, per sourcenono published above, recomputed every run

So the honest claim is a narrow one: the merge, the classification, the licence-class decode, the parcel join that supplies roof age and roof area, the occupancy class, and the delta are the work. The phone and the owner on the county half are the county's, and free. Until 2026-07-30 this paragraph left the parcel join and the occupancy class out and the free sample did not ship those columns at all — they were being computed, sold, and never mentioned. That is also why there is no card field anywhere on this site — see the founding list.

Every licence number in the table is checkable in the state's own register: DBPR licensee search. We publish the number and the class exactly as printed on the permit record. We do not assert that any licence is currently valid or in good standing — we have not queried DBPR, and you should before you rely on it.

What is held back, and what is missing

Masked here, and not sold at all. Phone numbers show the last two digits — 24 of the 25 rows shown carry one on the authority’s record. Owner of record shows the leading words only — 24 of the 25 rows shown carry one. Neither column is in the paid file: files-schema.json lists both as withheld and the publish step strips them from every servable file — we do not sell personal contact details, and the county’s own free layer carries them if you want them. They appear masked here to prove the authority publishes them, not to preview a column you would be buying. Licence numbers are shown in full, because they are the one field you can independently verify. The downloadable sample uses the paid file's own column names — it is a strict column subset of it, asserted on every build — so anything you map against the sample resolves against the real file. Until 2026-07-30 it did not: the sample called the same four fields valuation_declared, applicant_license_no, applicant_phone_redacted and owner_of_record_masked, and an import built on it broke on the file it was previewing.

That assertion used to cover one day. The 14-day spool the same endpoint serves held three incompatible schemas — 13, 17 and 31 columns, with contractor renamed to permit_applicant and contractor_phone to applicant_phone between them — so an importer written to this promise broke on thirteen of the fourteen days. Since 2026-07-31 there is one declared schema, published at /files-schema.json with the date each column first carries data, and verify-spool-schema.py exits non-zero if any file the endpoint can serve does not carry that exact header. A column added after a given day's run is present but empty in that day's file; it is never back-filled with a guess.

What was dropped from this pull, and why. Every reason below describes a record. None describes a company: an earlier version of this page dropped rows by running a regex over the applicant's company name, then published that guess as a statement about a named business's licensed trade. Selection now uses the authority's own discipline coding and the state licence class printed on the record.

The reasons below are the roofing-file selection applied on top of an already-gated product file. The universal gates — government owner of record, MEP sub-permit, corrupt valuation — run in the pipeline that WRITES the CSV, not here. Until 2026-07-30 they ran only here, which meant this page could report rows as filtered while the delivered file still contained them. This page now asserts that the delivered file carries none of them and refuses to publish itself if it does.
  • state licence class printed on the permit record is “unrecognised-prefix”, which is not a class that pulls roofing work — 2 rows

Permit status, read back from the source. 24 not mapped from this source, 1 Active across the 25 rows shown, and 1 of them had a status we could read at all — Miami-Dade publishes no status field in its layer, so those rows say so rather than sitting blank. Where finality is published, 1 of the shown rows are flagged not final. Nothing is filtered on status yet: the column ships first so you can see a withdrawn or expired permit, and so the vocabulary each authority actually uses can be watched before anything depends on it. Until it is, read a county row as "a permit with this issue date was in the published feed at our pull", nothing stronger. Declared valuations are the applicant's own figure and routinely understate real project cost. Coverage for this file is Miami-Dade County and the City of Miami only — see coverage for every jurisdiction and date range we hold. This is a lead list built from public records, not a vetted referral, and nothing here is legal or investment advice. Before you call anyone on it, scrub against the federal and Florida do-not-call registries — we have not; see terms.

Built 2026-09-12 from out/permits/miami/solar-2026-09-12.csv · this week's free digest · EarlyDocket