Miami-Dade only · latest run 2026-08-26, rebuilt nightly over a rolling 7-day window · free to read · nothing on this site is for sale

Miami remodel permits, with a phone number attached.

Built for flooring crews doing residential and condo work in Miami-Dade. Every row is an interior-remodel building permit from county public records that carries a direct phone number for the contractor who filed it — a job where floors are likely to be needed, not a job the county says involves floors. The number is the filer's — on this run 47 of 51 hold a general, building or residential licence — so calling it means pitching that contractor to sub the flooring to you, not reaching a homeowner who asked for floors. If there is no number on the record, it does not ship. The counts below are measured from the generated files, not projected.

Read this week’s 51 rows in full — free, no email
Download 25 real rows, phones masked →
The number to judge this on is the small one. The current run holds 51 permits with a phone, but only 8 of them are both residential and inside the $8k–$40k band — and that intersection is what a small crew can actually quote. Read the tiles below in that order, smallest last and loudest.

There is no price on this page, and that is deliberate. On 2026-08-21 the owner decided not to launch EarlyFloor as a paid product. The nightly build runs anyway at no extra cost, so what it produces is published here free and in full: this week’s rows, a 25-row sample CSV, the permanent weekly archive, the method and the counts. Nothing here can charge you, nothing has ever been sold, and there is no waiting list that turns into one. What is free, what is missing, and what to email about →
51
permits with a
direct phone
25
single-family or
individual condo unit
19
in the $8k–$40k
job-size band
8
residential AND in the
$8k–$40k band
7
whose county text
says floors (name only)
MEASURED, NOT PROJECTED — Miami-Dade County building permits issued 2026-08-19 to 2026-08-25, classified as interior remodel/renovation/addition, private owner, contractor phone present on the county record. Median valuation of the feed is $60,000; the residential rows median $60,000, so most of this feed sits above a small crew's usual ticket — that is the honest shape of it. Do not add the second and third tiles together: they overlap on only 8 rows, and that intersection — residential AND in your price band — is the highlighted tile and the number this whole product should be judged on. Counted from flooring-stats-2026-08-26.csv, generated 2026-08-26T18:47:44.518Z. The exact endpoints and filters are published, and the current week of rows is readable before you pay.
We overruled the county on two of those three rows, and you had to find that out yourself. 7 of the 8 residential-and-in-band rows carry the county's own permit text “CONDO/APT INDIVIDUAL UNIT”. Across the whole feed that is 11 of the 25 rows we label residential. Our rule is that one condo unit’s interior renovation is a residential-scale remodel — the kind a two-truck crew actually wants — not a 200-unit tower, so “individual unit” beats “condo” when both appear. You are entitled to disagree with that rule. You should not have had to discover it: every row on the sample page now prints the county’s own occupancy wording beside our label, and marks the rows where the two differ.
The strongest signal we have

The rows that actually say floors.

The City of Miami writes the trade scope into the permit description itself. When it does, you are not inferring anything — the permitting authority has stated the job includes floor coverings. This is the county's own text, copied out of the evidence column of the file:

REMODELING/REPAIRS WOOD/LAMINATE/TILE/VINYL

That string answers "is this my job?" in about two seconds, which nothing else on this page can do.

What it does not answer is whether the job is yours. In this run 0 of 7 declared-scope rows carry a residential occupancy label; 7 are commercial or multifamily. The county stating that a job includes floor coverings is not the county stating it is a house. If you only work residential, read that number before you read the three above it. The example above is pulled from a real row of the current run, not typed by hand — it changes when the run changes.

7
permits in the current run
(2026-08-192026-08-24)
$14,000
median valuation
lowest was $7,923
5
of them in the
$8k–$40k band

Why this window ends a day later than the phone feed’s. Same run, two different permitting authorities. The phone feed is Miami-Dade County, whose newest issued permit in this run is dated 2026-08-25; these rows are the City of Miami, whose newest is 2026-08-24. Each authority publishes on its own lag and neither window is padded to match the other.

Name only — there is no phone number on these records. They come from the City of Miami's permit source, which publishes no contractor phone on any record at all. You get the company name, the address, the valuation, the permit ID and the county's scope text.

Correction, 2026-07-30: this page used to tell you to run a Florida DBPR licence lookup to get a number. DBPR does not publish phone numbers. The state's own licensee extracts (cilb_certified.csv, cilb_registered.csv) are twelve columns — licence prefix, licence class, licence number, licensee name, two address lines, city/state/ZIP, expiry, then continuing-education fields. No telephone column exists in the file. A lookup gives you the licence and a mailing address, not a call. The routes that can actually produce a phone are the Sunbiz corporate officer record keyed off the company name, or the Miami-Dade county feed when the same firm also filed a county permit.

And we were throwing away contact data the source already gave us. The City of Miami record publishes the applicant's own mailing address, city and ZIP; the pipeline was discarding all three, so this page sent you off to an external lookup for less than the county had already handed over. Those columns now ship: 7 of 7 declared-scope rows in this run carry the applicant's mailing address. They are mail-or-door rows with a real address, not names with nothing. Getting from one of them to a conversation is still real work, and it is why they ship in a separate, clearly-labelled file instead of being mixed into the phone feed. All 7 of them are listed on the sample page — read them before you decide whether that trade is worth it to you.
What is actually in the file

One signal has volume. The other two do not.

This page used to lead with fire and water damage repair. Those signals were named after rules in our classifier, not counted in the output. Here is what the current run actually produced.

01 · the feed

Interior remodels

Renovations, additions and interior alterations on private property, with the contractor who filed the permit and their phone number. That is every row of the phone feed — the whole thing, nothing else.

// 51 of 51 rows carry a phone
02 · not currently produced

Fire-damage repair

Genuine fire-damage repair permits are rare. The run scans every permit the county issued in the window and classifies each one; the fire-damage bucket came back empty. Earlier in the month the two that did appear were a $76,000 job filed by an air-conditioning sub and a $3,500 job with no phone on the record. Neither survives the phone gate. Do not come here for this.

// 0 of 2,000 permits scanned
03 · not available at source

Water-damage repair

Miami-Dade's permit feed has no distinct label for water-damage remediation. We cannot find these permits because the county does not mark them. Nothing here is being withheld — it does not exist in the data.

// 0 rows, ever
Show me the list

Six real rows, redacted.

Not cherry-picked: these are the cheapest row, the most expensive row and four evenly spaced in between, taken straight from the current file. The last four phone digits are masked because this is a public sales page. The full current week, with three phone numbers left unmasked so you can place a test call, is here. Every earlier week the pipeline has produced is kept at the weekly archive — phone digits withheld, every row still checkable against the county. The permit and week counts are printed on that index and rewritten by the run that builds it, so they are current rather than a figure typed here once and left to drift (which is what this sentence used to be).

IssuedOccupancyMunicipalityValuationPermit applicantPhone
2026-08-24commercialUnincorporated County$4,000NUWAVE CONTRACTORS LLC(561) 797-••••
2026-08-20commercialHialeah Gardens$17,850GREEN SIERRA CONSTRUCTION CORP(305) 281-••••
2026-08-24residentialSunny Isles Beach$45,000JOHN & JOHN AFFORDABLE SHUTTERS INC(954) 303-••••
2026-08-25residentialSunny Isles Beach$78,773GORO CONSTRUCTION INC(954) 554-••••
2026-08-24commercialUnincorporated County$172,000YA GAR CONSTRUCTION INC(305) 649-••••
2026-08-21commercialUnincorporated County$8,400,000BRASFIELD & GORRIE L.L.C.(407) 562-••••

“unknown” in the occupancy column is not a hedge, it is a miss. It means the county parcel record did not resolve this address to a dwelling class, so we decline to label it rather than guess one. It is the honest value and it is also the least useful one, so read those rows against the county’s own wording instead: on this run the unknown row is a bathroom renovation the county describes as CABANA/CHICKEE/GAZEBO, which is a real permit and almost certainly not a floor you want. Every row’s county wording is printed beside our label on the sample page, and the rows where the two disagree are marked. The full CSV also carries the address, the permit ID, the parcel folio and the exact county text that made us classify it — so you can pull the permit yourself and check we did not invent anything. The source endpoints are published so you can go and do that.

Or take 25 rows away with you. Download the free sample CSV — 25 real permits, 20 of the paid file’s 30 columns, drawn from the same spool the paid download reads so the free file and the paid file cannot describe different products. The phone column reads REDACTED-nn (the last two digits, so you can see the column is populated and by which number); everything else — permit ID, folio, address, valuation, licence, the county’s own evidence string — is unmasked, because a sample you cannot check against the county proves nothing. What is masked and what is withheld is listed in machine-readable form here.

Before you rely on it

What this feed cannot do.

Three things a permit feed is often sold as. Here is where this one stands on each, today.

Tell you the job has reached the flooring stage. Floors go in near the end of a job, and a permit issue date is the start of one. We would need inspection history to know the stage. Miami-Dade publishes it, but in the current run 1 of 51 qualifying permits carry an inspection date — so we do not sort by stage and we do not claim to.1 / 51 · not shipped
Guarantee the name on the permit is the general contractor. The county field is whoever filed the permit. On repair and alteration permits that is routinely a trade sub — one $76,000 "repair due to fire" permit this month was filed by an air-conditioning company. The column is called permit_applicant for that reason.

Corrected 2026-07-30. This page used to say the check was a guess off the company name, and that a sub trading as "MABER CONSTRUCTION LLC" was undetectable — matching 4 of the rows. That was true of the name regex and false about the record: Miami-Dade publishes the filer's Florida DBPR licence number on the permit, and we now read it. On this run 51 of 51 rows carry a licence number; 47 decode to a general, building or residential class — licensed to let subcontracts — and 4 decode to an air-conditioning, mechanical, plumbing, roofing, pool, solar or underground-utility class. The number ships in the applicant_license column so you can paste it into DBPR's own public search. What it still cannot do is confirm anyone is a flooring contractor — Florida licenses no floor-covering class at all.
51 / 51 licensed · 4 MEP subs
Cover Orlando. Correction, 2026-08-19: this section was wrong for three weeks, and it was wrong in our favour. It said Orlando’s dataset "has no telephone field at all — not an empty one, none", and gave that as the reason Orlando produced no rows. The City of Orlando dataset ryhf-m453 does publish contractor_phone_number, and on 2026-08-19 it carried a number on 746 of the 1,362 permits issued since 2026-08-01. What was true is that our field map never requested that column, so our pipeline read an empty string on every Orlando row and we wrote that down as a fact about the city. The map was corrected the day this was found. The honest current position: with the phone read, Orlando produced 2 flooring rows in the 2026-08-19 run — one commercial and one whose occupancy that source does not resolve; neither is residential. Earlier that day this line said 4, and two of those four were fire-alarm sub-permits filed against someone else’s remodel — exactly the rows the quality gates claim to remove. The gate only understood Miami’s permit-number convention, where the trade letter trails the number; Orlando puts the discipline in front (FIR/ELE/MEC/PLM), so every Orlando sub-permit walked through it. Fixed the same day; the two fire-alarm rows no longer ship. Two commercial rows a run is not a metro worth putting anyone’s name against, so Orlando is not published as a feed, is not on the sample page, and stays on the coverage page as a metro we pull and do not present as usable.2 rows · not sold
What it costs

Nothing. And here is exactly what that does and does not get you.

This section used to argue a monthly subscription price against the volume behind it. On 2026-08-21 the owner decided not to launch EarlyFloor as a paid product at all, so the price is gone rather than discounted, and what is left to argue about is only whether these rows are any use to you.

Free
Miami-Dade · one operator · nothing on this site is for sale
NO CHECKOUT, BY DECISION

There was never a checkout here to switch off: the Gumroad product was never created and nothing was ever sold to anybody. What changed on 2026-08-21 is that it is not going to be, so this page stopped quoting a price for it. The nightly build costs the same to run either way, which is the only reason this site is still standing.

The volume behind it is 8 rows a week — residential and inside the $8k–$40k band, the highlighted tile at the top of this page. 7 of those 8 are rows the county's own text calls CONDO/APT INDIVIDUAL UNIT and we call residential — the rule and the reasoning are stated above, and every row’s county wording is on the sample page. At 52/12 weeks per month that is about 35 rows a month — and that monthly figure is one window multiplied out, not an average. It is one 7-day query window, in which the permits the county actually issued span 7 calendar days (2026-08-19 to 2026-08-25) — so the weekly rate is a whole query window, not those calendar days annualised. The occupancy column that decides which rows count as residential only exists in runs from 2026-07-29, so we hold 9 calendar week(s) of it (2026-W27, 2026-W28, 2026-W29, 2026-W30, 2026-W31, 2026-W32, 2026-W33, 2026-W34, 2026-W35) and the spread is measurable rather than promised. Across the 29 runs that carry it, from 2026-07-29 to 2026-08-26, the count of residential in-band rows has run 3, 4, 7, 6, 9, 9, 8, 9, 7, 6, 3, 3, 3, 1, 1, 2, 3, 3, 5, 5, 5, 3, 4, 7, 5, 7, 7, 10, 8 — low 1, high 10, median 5, and 8 in the run this page describes. Read it as a range and not as a rate: every run republishes a rolling seven-day window, so consecutive runs share most of their rows and are not independent weeks. Counting every row in the phone feed instead, the run holds 51 a week, about 221 a month. Those figures are arithmetic over the tiles above and nothing else. What a row is worth to you is not a number this page can honestly print: it depends on your close rate and on your share of the job. And the band is the county's valuation of the whole remodel, not the flooring subcontract — so do not read "$8,000 job" as "$8,000 to you". Every figure here is recomputed by the run that generates the data and lives in claims.json.

What the free showcase gives you

  • This week’s rows, in full: the 51 Miami-Dade interior-remodel permits in the current run, each with its issue date, occupancy, the county’s own classifying text, valuation, the filing contractor, that filer’s Florida DBPR licence number and class, and the permit ID — regenerated by the build, not transcribed by hand
  • Three real, unmasked contractor phone numbers on that page every run — the three lowest-valuation rows — so you can place a test call and judge the data instead of taking our word for it. The rest are masked, and the reason is not that they are being held back for a buyer: this page is permanent and search-indexed, and printing every filer’s direct line on it hands a scraper a ready-made call list
  • The county permit ID printed beside each row, so a row you want the number for can be pulled from Miami-Dade’s own record — where the contractor phone is published too
  • The split by occupancy — 25 residential, 26 commercial/multifamily in this run — so you can see which half of it is yours before you read a line of it
  • The separate name-only file: 7 permits whose own county text declares floor scope, of which 0 are residential — the strongest rows we have and the ones with no phone at source
  • A 25-row sample CSV, real rows, with the phone column redacted to its last two digits so you can see it is populated and check the shape of the file, plus a manifest naming which columns are blank on every row of the run
  • Every earlier week, kept — grouped by the week the county issued the permit, deduplicated, and never overwritten by a later run
  • Flooring firms kept out by a company-name check that runs before the file is written: 0 applicant was dropped from this run. It is no longer only names containing a floor word — the national chains that carry none are listed by name, because EMPIRE TODAY LLC, a national flooring retailer and therefore a competitor rather than a lead, reached the downloadable file on five consecutive nights while this page described the gap and deferred the fix to "the next build". Deferring it was the error. The exclusion now runs in the publish step on every cut, the fourteen dated files already in the spool were rewritten through it, and a final assertion re-reads every servable file and refuses to publish at all if a flooring-trade applicant is in one. What a name check still cannot do is catch a retailer whose name gives nothing away, so scan the name-only file rather than trusting every row on it. The rule is enforced in two places and both counts are printed rather than the flattering one: the generator excluded 0 applicant(s) when it built this run, and the publish step that writes the file removed 0 more on top of that.
  • The published query, the filters, the date window and claims.json — so every count on this page can be recomputed from the files it was computed from, by you, without asking us

What it does not give you

  • A delivered file. Nothing arrives in your inbox and nothing downloads on a schedule. What is published is what is on this site, and you come and fetch it
  • The phone on every row. Three a run are open; the rest are on the county record, under the permit ID printed beside them
  • The exact street address of a residential row on the sample page. It is shown as its 100-block with the unit number removed — withholding the owner’s name while publishing their doorstep on a permanent, search-indexed page next to a renovation valuation would protect nobody. Commercial rows print in full
  • A phone number on the declared-scope rows — there is none at source, and DBPR does not publish one either
  • Job stage. 1 of 51 rows carry an inspection date
  • Any metro except Miami-Dade and the City of Miami. Orlando is pulled nightly and produced 2 rows in the 2026-08-19 run — one commercial, one whose occupancy that source does not resolve, neither residential
  • The owner of record. The county publishes it and we hold it; it is not published here and it is not in the sample CSV, because on a residential permit that name is usually a private individual at their own home
  • A guarantee the filer is the GC. The licence class rules MEP subs out — 4 of 51 rows decode to one in this run — but it can never rule anyone in as a flooring contractor, because Florida licenses no such class
  • A promise about tomorrow. The build runs on a nightly schedule at 18:45 UTC and every file is dated, so you can always see for yourself how fresh what you are reading is — but this is one operator on one box, and an uptime promise is not something that would mean anything from me
  • A dialled phone. The build refuses any county row without a number, and the number is one the county itself printed on the permit — but nothing here calls it. The test is that the record carries a number of the right shape, not that the number answers, and no line-type, disconnection or reachability check is run against any row
  • A second channel. 51 of 51 county rows carry a phone and nothing else contactable — no email address and no company website. The City of Miami rows are the mirror image: a mailing address and no phone
  • A guarantee you are early. These are issued permits: this run covers permits issued 2026-08-19 to 2026-08-25 and was built on 2026-08-26, a two-to-seven day lag on top of a permit a contractor pulls only after the job is bid. On a remodel the flooring sub is often chosen before the permit exists, so on some rows you are asking to be considered next time rather than for this job; and because floors go in near the END of a remodel, other rows are months early instead
  • Exclusivity. This is a public page reading public records — nothing about it stops another crew calling the same permit
If you want this as a feed rather than a page, email and say so. The one thing this site cannot do is put the file in your hands each morning — that needs a product with a price on it, and after 2026-08-21 there is not one. If a delivered feed is what you actually want — the three cuts with the phone column filled in, the last fourteen days kept, arriving instead of fetched — email hello@earlyfloor.com and say which metro and which rows. One operator, one inbox, a real reply. To be plain about what that is: there is no price, no queue, no pre-order and nothing to pay, and asking commits you to nothing. It is simply the only thing that would get a paid feed built — and if nobody asks, this site stays exactly as it is.

What you are comparing this to

This page spends most of its length arguing against itself and never once against the alternative you are actually paying for today. So: put your own numbers in. Nothing is sent anywhere — this is arithmetic in your browser, and we do not know and do not assert what any marketplace charges you. The right-hand column is $0 because this is a free page, not because anything here is being discounted to win the comparison.

Your numbers, per month $1,100 and $440 per job actually won, at 1 in 8
EarlyFloor, today $0 the rows are free to read and there is nothing here to buy (about 35 residential rows a month inside the $8k-$40k band, at this run’s rate)
The two are not the same unit, and pretending otherwise would be the fabrication this site exists to avoid. A marketplace lead is a homeowner who raised a hand and asked for flooring. An EarlyFloor row is a licensed contractor who filed a remodel permit at an address — verifiable against the county, but he did not ask for you: calling him means cold-pitching your crew as his flooring subcontractor, and on most rows the permit does not say “floors” at all. We cannot tell you your close rate on the second, because nobody has ever bought this feed. Any figure we printed there would be invented. What we can do is price our side of it precisely and let you price yours.

Longer version, including the ways this is worse than a marketplace: permit leads vs marketplace leads. Not in Miami-Dade? read the coverage matrix first.
How to use it
FormatA CSV per file, plus the sample page you have already seen. Thirty-four columns: issue date, work type, occupancy, contact quality, county-declared floor scope, address, city, municipality, valuation, permit applicant, applicant phone, applicant trade guess, last inspection, CO date, permit ID, source, the county text that classified it, applicant licence number and class, applicant mailing address / city / ZIP where the source publishes one, permit status, permit-is-final, permit and remodel square footage, and the parcel folio with its year built, unit and building square footage from the county parcel layer. Four more are derived here rather than copied from the county, and three of the four exist to tell you something unflattering about a row: first_seen_date, the earliest run that carried this permit, so a daily download can be filtered down to what is genuinely new; filer_rows_in_file, how many rows in this same file are the same filer, so you do not ring one number twice believing it is two prospects; applicant_name_trade_hint, what the filer’s own NAME says its trade is when the licence says something else — a firm called “… A/C and Electric Service” holding a Cert General licence is precisely the row that wastes a call; and in_band_residential, the residential-and-in-band intersection flagged on the row instead of left for you to re-derive by hand. Twenty-four of those thirty-four are in the free 25-row sample CSV; the ten that are not are the ones no public surface carries. Column count is not content either, so here is the other half of it: eight of the thirty-four are blank on every row of the current run. Which eight, counted from the delivered bytes rather than asserted, is in the sample manifest under emptyInThisRun. The owner of record is not among them — see the exclusions above.
FilesThree: the phone feed, split residential and commercial/multifamily, and the separate name-only file of permits whose county text declares floor scope.
VolumeThe current run produced 51 phone-bearing permits over 7 days, at 51 distinct addresses, plus 7 name-only declared-scope permits. That is the honest expectation — not a projection.
DeliveryThere is none, and that is the honest shape of a free showcase. Nothing is emailed and nothing downloads on a schedule. You read the current week, take the sample CSV, and go back through the archive yourself. The licence-checked download endpoint that a paid feed would have used is still installed and still refuses every request it is given, because no licence key has ever been issued to anyone and none can be while the checkout stays closed. It is left in place rather than ripped out so that a future decision to sell does not have to rebuild it — not because anything is pending.
CadenceRebuilt nightly; new rows arrive about weekly. Both halves of that matter, so here is the measurement. The build runs every night at 18:45 UTC — 14 consecutive dated files on disk, each written on its own date. But each build holds a rolling 7-day window of issued permits, and the counties publish on their own lag, so most nights the rebuilt file is mostly the same permits. Measured over the nine nights to 2026-08-19, the number of permits that were not in the previous night's file ran 0, 8, 9, 15, 0, 6, 0, 0, 5four of those nine nights added nothing new at all. So: check it daily if you like, and expect a week's worth of genuinely new work per week. Anyone selling you a permit feed as a daily stream of fresh leads in this county is not counting. The spool keeps the last 14 dated files, so a day you skip is still downloadable tomorrow.
Quality gateBefore a file is published it has to pass a check on the valuation ceiling, government-owned parcels, a phone on every row, a permit ID on every row, and a row count that has not collapsed against the trailing median. A run that fails is not shipped at all: the previous day's file stays the newest one you can download, and this page keeps showing that older date rather than putting a fresh date over bad rows.
TodayEverything on this site is readable right now, with no email address, no account and no card — there is no card number this site could take, because there is no checkout on it. If a row looks wrong, or you are in one and want out, or you want this as a delivered feed instead of a page, email hello@earlyfloor.com: one operator, one inbox, and removals are applied to the published files and not only to the counts.
Not in Miami-Dade?

Miami-Dade is the only metro with usable data.

Tell us your metro and you are on the list. You will get a straight answer about whether yours has usable data — for Orlando today that answer is 2 rows a run and none of them residential, which is a no, and we would rather say so than let you find that out the slow way.

This form takes no card, starts no subscription and reserves nothing — there is no product to reserve. It is a list, and there is no price for it to hold you at, because on 2026-08-21 the owner decided not to launch a paid feed. What it gets you is a reply about whether your metro has usable data, and it is the signal that would reopen that decision if enough people asked. If you would rather just say it in a sentence, hello@earlyfloor.com reaches the same person. What is free and what is missing is above. Pick Miami and one thing already arrives without asking: the newest run’s digest — the same rows with the phone numbers unmasked — is emailed to you daily, free, with an unsubscribe link in every one; no other metro gets any automated email, because no other metro has usable data to send. We store your email only to run the list — unsubscribe anytime.