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 35 from City of Miami + 120 from Miami-Dade County published to their open-data feeds in our 2026-11-07 pull, filtered to the ones a solar installer would call. The issue dates on these records run 2026-10-31 to 2026-11-06 — the authorities publish days after they issue, and by how much is measured below. 25 rows are shown out of the 150 that passed this file's roofing selection, drawn from the 155 rows in that pull. 5 of those 155 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
2027007213$1,750,000WICK CONSTRUCTION LLC2026-11-03matched /\broof(?!.*solar)/ in "BLDG ALDI BUILDOUT ROOF — RETAIL SALES"11030 NW 7 AVE, MiamiroofingCCC1337010
Cert Roofing
•••-••14 withheld from the paid file — free on the county’s own record11010 LAND ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
BD26020098001BR001$583,162BEST ROOFING SERVICES LLC2026-11-03matched /\broof(?!.*solar)/ in "BUILDING ROOFING FLAT ROOF — Commercial"234 NE 3 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
2027007042$500,000EH WATERPROOFING PLUS, INC2026-11-03matched /\broof(?!.*solar)/ in "BLDG FLAT LQUID ROOF — SINGLE FAM RES-CLUST-ZERO LOT-TOWN HOUSE"5822 SW 60 ST, MiamiroofingCCC1335584
Cert Roofing
•••-••66 withheld from the paid file — free on the county’s own recordLARA HOME ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
BD26020661001BR001$371,903RHI Construction Inc.2026-11-05matched /\broof(?!.*solar)/ in "BUILDING ROOFING FLAT ROOF — Commercial"140 NE 39 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
2027007231$350,000EXTREME ROOFING INC2026-11-03matched /\broof(?!.*solar)/ in "BLDG NEW ROOFDEL — SINGLE FAM RES-CLUST-ZERO LOT-TOWN HOUSE"8775 SW 81 ST, MiamiroofingCCC1326021
Cert Roofing
•••-••35 withheld from the paid file — free on the county’s own recordRICARDO X ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
2027006645$246,200M. ROMERO'S ROOFING & INSPECTIONS INC2026-11-01matched /\broof(?!.*solar)/ in "BLDG NEW ROOF — SINGLE FAM RES-CLUST-ZERO LOT-TOWN HOUSE"10459 SW 174 TER, MiamiroofingCCC044016
Cert Roofing
•••-••04 withheld from the paid file — free on the county’s own recordSUSAN CLAIRE ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
2027007740$100,010EDGE 2 EDGE ROOFING LLC2026-11-05matched /re-?roof/ in "MBLD BLDG 5 REROOF TILE — 5 UNITS OR MORE - RESIDENTIAL"10755 NW 50 ST, MiamiroofingCCC1330977
Cert Roofing
•••-••43 withheld from the paid file — free on the county’s own record10825 NW ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
2027006631$87,000CROWN DESIGN BUILDERS CORP2026-10-31matched /re-?roof/ in "BLDG METAL REROOF — SINGLE FAM RES-CLUST-ZERO LOT-TOWN HOUSE"9445 SW 100 ST, MiamiroofingCCC1332402
Cert Roofing
•••-••76 withheld from the paid file — free on the county’s own recordLILLIAN M ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
2027007601$68,980LOCK TIGHT IMPACT WINDOWS DOORS & ROOF2026-11-05matched /re-?roof/ in "BLDG REROOF — SINGLE FAM RES-CLUST-ZERO LOT-TOWN HOUSE"12821 SW 216 TER, MiamiroofingCCC1328915
Cert Roofing
•••-••11 withheld from the paid file — free on the county’s own recordLARRY N ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
2027007257$64,200TOP SEAL SERVICES CORP2026-11-04matched /re-?roof/ in "BLDG METAL RE-ROOF — SINGLE FAM RES-CLUST-ZERO LOT-TOWN HOUSE" | matched /\broof(?!.*solar)/ in "BLDG METAL RE-ROOF — SINGLE FAM RES-CLUS9534 SW 125 TER, MiamiroofingCCC1330119
Cert Roofing
•••-••88 withheld from the paid file — free on the county’s own recordMICHELLE BEYER ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
2027007675$63,000S&S ROOFING CORPORATION2026-11-05matched /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-T27410 SW 167 AVE, MiamiroofingCCC1332780
Cert Roofing
•••-••93 withheld from the paid file — free on the county’s own recordROBERTO ANTONIO ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
2027007532$61,250RANKED-1 ROOFING LLC2026-11-04matched /re-?roof/ in "BLDG REROOF — SINGLE FAM RES-CLUST-ZERO LOT-TOWN HOUSE"7445 N AUGUSTA DR, MiamiroofingCCC1336970
Cert Roofing
•••-••25 withheld from the paid file — free on the county’s own recordRAUL LOPEZ ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
2027006998$55,155TOP FLORIDA ROOFING LLC2026-11-03matched /re-?roof/ in "BLDG RE-ROOF METAL — SINGLE FAM RES-CLUST-ZERO LOT-TOWN HOUSE" | matched /\broof(?!.*solar)/ in "BLDG RE-ROOF METAL — SINGLE FAM RES-CLUS9221 E CALUSA CLUB DR, MiamiroofingCCC1332906
Cert Roofing
•••-••44 withheld from the paid file — free on the county’s own recordXAVIER MIRANDA ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
BD25024796005BR001$52,500M Romeros Roofing & Inspections Inc2026-11-06matched /\broof(?!.*solar)/ in "NEW CONSTRUCTION TILE ROOF — Residential" | matched /\btile roof/ in "NEW CONSTRUCTION TILE ROOF — Residential"4161 WOODRIDGE RD, 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
2027007221$47,000P & L ROOFING CORP2026-11-03matched /re-?roof/ in "BLDG REROOF TILE — SINGLE FAM RES-CLUST-ZERO LOT-TOWN HOUSE"9630 SW 122 ST, MiamiroofingCCC1333667
Cert Roofing
•••-••35 withheld from the paid file — free on the county’s own recordHECTOR TRUJILLO ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
2027006742$44,655T & S ROOFING SYSTEMS INC2026-11-02matched /re-?roof/ in "BLDG REROOF — SINGLE FAM RES-CLUST-ZERO LOT-TOWN HOUSE"841 NW 129 AVE, MiamiroofingCCC1326032
Cert Roofing
•••-••54 withheld from the paid file — free on the county’s own recordALEXANDRA M ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
2027007298$43,740ACOSTA ROOFING CONTRACTOR CORP2026-11-04matched /re-?roof/ in "BLDG REROOF — SINGLE FAM RES-CLUST-ZERO LOT-TOWN HOUSE"23790 SW 214 PL, MiamiroofingCCC1332783
Cert Roofing
•••-••96 withheld from the paid file — free on the county’s own recordARMANDO LOPEZ ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
2027006656$43,533STATEWIDE ROOFING PARTNERS LLC2026-11-02matched /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-T5757 DEVONSHIRE BLVD, MiamiroofingCCC1335805
Cert Roofing
•••-••12 withheld from the paid file — free on the county’s own recordLAUREL MARCHETTI ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
BD26025041001BR001$42,344Kairos Roofing LLC2026-11-02matched /\broof(?!.*solar)/ in "BUILDING ROOFING FLAT ROOF"1745 NW 32 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
BD25029865008BR001$42,200JF MARTINEZ LLC2026-11-06matched /\broof(?!.*solar)/ in "ADDITION AND REMODELING FLAT ROOF — Residential"3660 SW 20 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
2027007619$42,000LOCK TIGHT IMPACT WINDOWS DOORS & ROOF2026-11-05matched /re-?roof/ in "BLDG REROOF — SINGLE FAM RES-CLUST-ZERO LOT-TOWN HOUSE"7300 SW 161 PL, MiamiroofingCCC1328915
Cert Roofing
•••-••11 withheld from the paid file — free on the county’s own recordJULIO A ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
BD25003868004BR001$41,000MIAMI ROOFING SYSTEMS INC2026-11-02matched /\broof(?!.*solar)/ in "NEW CONSTRUCTION FLAT ROOF — Residential"2685 SW 17 AV, 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
2027007590$40,000CROWN DESIGN BUILDERS CORP2026-11-05matched /re-?roof/ in "BLDG METAL RE-ROOF — SINGLE FAM RES-CLUST-ZERO LOT-TOWN HOUSE" | matched /\broof(?!.*solar)/ in "BLDG METAL RE-ROOF — SINGLE FAM RES-CLUS3830 SW 134 AVE, MiamiroofingCCC1332402
Cert Roofing
•••-••76 withheld from the paid file — free on the county’s own recordANAY VALDES ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
2027006871$40,000BENSIDE CONTRACTORS GROUP LLC2026-11-02matched /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-T3717 SW 149 AVE, MiamiroofingCCC1328155
Cert Roofing
•••-••72 withheld from the paid file — free on the county’s own recordROLANDO J ••• withheld from the paid file — free on the county’s own recordnot mapped from this source · final: not mapped from this source
2027007731$39,562SAFEGUARD IMPACT WINDOWS, DOORS & ROOF2026-11-05matched /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-T15110 SW 62 ST, MiamiroofingCCC1336241
Cert Roofing
•••-••00 withheld from the paid file — free on the county’s own recordGRACIELA HERNANDEZ ••• 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 155-row pull is 127 residential, 20 commercial, 6 multifamily, 2 unknown. The 150 rows that passed this file's roofing selection are 123 residential, 19 commercial, 6 multifamily, 2 unknown. The 25 shown below are 21 residential, 3 commercial, 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-11-07 run was 2026-11-06 (1 day behind that run; 1–1 days across the last 10 runs)
  • Miami-Dade County — the newest issue date it had published to us on the 2026-11-07 run was 2026-11-05 (2 days behind that run; 2–7 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-11-07 run was 2026-11-06 (1 day behind that run; 0–1 days across the last 10 runs)

The file on this page (2026-11-07 run) brought 35 permit numbers that were not in the previous run, out of 155 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-10-31→2026-11-07 runs of this exact file, a run brought 0–148 permit numbers that were not in the previous run (median 34), and 1 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-11-07 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 132 of 155 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 120 of 155 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 120 of 155 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 35 from City of Miami + 120 from Miami-Dade County, merged
Parcel year built and building square footage no — a separate parcel layer (ParcelsView), joined on the folio no 149 and 149 of 155 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 153 of 155 rows classified residential, commercial or multifamily — the column that lets you not call the warehouses. The remaining 2 carry the literal value unknown: the classifier could not decide and says so instead of guessing.
Permit square footageas publishedas published 120 of 155 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 — 19 of the 25 rows shown carry one on the authority’s record. Owner of record shows the leading words only — 19 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 — 5 rows

Permit status, read back from the source. 19 not mapped from this source, 6 Active across the 25 rows shown, and 6 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, 6 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-11-07 from out/permits/miami/solar-2026-11-07.csv · this week's free digest · EarlyDocket