Childcare Provider Leads — Daycare Contact Lists + Compliance avatar

Childcare Provider Leads — Daycare Contact Lists + Compliance

Pricing

from $6.60 / 1,000 results

Go to Apify Store
Childcare Provider Leads — Daycare Contact Lists + Compliance

Childcare Provider Leads — Daycare Contact Lists + Compliance

Licensed childcare provider lead lists from official state licensing data with direct phone AND email contacts (Texas HHSC). Filter by county, type, capacity, ages served; each lead scored with 2-year deficiency counts + high-risk flag. Delta mode alerts on newly licensed operations.

Pricing

from $6.60 / 1,000 results

Rating

0.0

(0)

Developer

Kyle Maloney

Kyle Maloney

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

3 days ago

Last modified

Share

Childcare Provider Leads - Daycare Contact Lists + Compliance

A licensed childcare provider lead list with a compliance record attached, built on the Texas HHSC Child Care Licensing open data. One row per operation: name, physical and mailing address, phone, email, website, the named administrator/director, licensed capacity, ages served, hours, and the operation's full published deficiency and enforcement history.

Keyless Socrata sources. No login, no API key, no anti-bot games.

Contact-field population - measured, not assumed

Measured live on 2026-08-01 across the entire active Texas roster (n = 14,937):

FieldPopulated
phone99.6%
address / city / county / zip99.1%
mailing_address99.1%
administrator_director_name69.1%
email56.6%
website37.8%
capacity99.0%

Email is on a little over half the roster. That is the honest number and it is why every row also carries has_phone, has_email, has_named_contact and a contact_channels array - so you can filter to genuinely reachable leads before you export, rather than discovering the gap afterwards. Texas publishes no email for the other 43.4%; no actor can invent one.

What changed in v1.1 (2026-08-01)

high_risk_flag used to say false on operations that were never checked. In v1.0 the flag was initialised false and left there whenever includeCompliance was off or the non-compliance join threw - a billable row asserting that a childcare operation is not high-risk on a check that never ran. It is now null unless the join actually answered for that specific operation, and violations_status says which.

The compliance data was there all along and was being thrown away. The HHSC roster record publishes its own deficiency counts by risk level (deficiency_high, deficiency_medium_high, deficiency_medium, deficiency_medium_low, deficiency_low), plus total_inspections, total_assessments, total_reports, total_self_reports, and the corrective_action / adverse_action / temporarily_closed enforcement flags. v1.0 fetched every one of those columns on every row and emitted none of them, then spent an extra request per 50 operations computing a partial 2-year version instead. Verified live: operation 97587's roster counts sum to 214 and the non-compliance table holds exactly 214 rows for it; 1311197 = 188/188; 290772 = 123/123. All of it now ships, which means the risk signal survives even when the optional join is off or down.

minCapacity was deleting an entire category. v1.0 read an unpublished capacity as 0, so any minCapacity filter silently dropped every operation Texas publishes no capacity for - 141 of the 236 Child Placing Agencies in the state (59.7%). Unknown capacity is now kept and marked.

"New operations" mode never returned a new operation. The baseline lived in the run's default key-value store, which Apify recreates for every run, so every run saw an empty baseline, declared itself the first one, and re-emitted the whole roster. It now uses a named, filter-scoped store.

Also: administrator_director_name and mailing_address are emitted, the roster page cap follows maxResults instead of stopping at 10,000, roster paging carries a stable tiebreaker, accepts_subsidies and the YES/NO columns are tri-state, and the run fails loudly before billing if the upstream drifts.

Who it is for

  • Sales & marketing teams selling into childcare: curriculum, food service, insurance, staffing, POS, cleaning, playground equipment. Filter on contact_channels, capacity and operation_type.
  • Franchise and M&A scouts sizing a market by county, capacity and permit type.
  • Parents, brokers and referral services who need the compliance record next to the contact details.
  • Researchers and journalists studying childcare supply, subsidy acceptance and enforcement.

Example input

{
"state": "TX",
"county": "Harris",
"operationType": "Licensed Center",
"maxResults": 100,
"includeCompliance": true,
"highRiskThreshold": 10
}

Output fields

Every field below is emitted on every row. null always means not checked - never "checked and negative".

FieldDescription
stateUS state of the licensing registry (v1: TX).
operation_idInternal licensing operation ID (join key to state non-compliance records).
operation_numberPublic operation/license number.
operation_nameName of the childcare operation.
operation_typeLicense type, e.g. Licensed Center, Registered Child-Care Home, Listed Family Home.
addressStreet address of the operation location.
cityCity of the operation location.
countyCounty of the operation location.
zip5-digit ZIP code.
phoneProvider phone number. Populated on 99.6% of the active TX roster.
emailProvider email address. Populated on 56.6% of the active TX roster - the sparsest contact field. Use has_email or contact_channels to filter to reachable leads.
websiteProvider website when on file.
capacityTotal licensed capacity. NULL when TX does not publish one - see capacity_known. Never coerced to 0.
ages_servedLicensed-to-serve age groups.
programs_providedPrograms offered (e.g. drop-in care, meals, part-time).
accepts_subsidiesTrue when the operation accepts child-care subsidies (Y/N as published; 6,038 Y of 14,983). NULL when the column is absent rather than false.
issuance_dateLicense/permit issuance date (YYYY-MM-DD).
deficiency_count_2yNumber of non-compliance records for this operation inside the 2-year window. IMPORTANT: the window keys off corrected_date, so this counts deficiencies CORRECTED in the last two years, not cited - the TX table publishes no citation date. NULL when the join did not answer; 0 means it answered and found none.
deficiency_weighted_score_2yRisk-weighted 2-year score (High 5, Medium High 3, Medium 2, Medium Low 1, Low 0.5) - an editorial weighting, not an HHSC measure. NULL when the join did not answer.
recent_deficiency_datesUp to three most recent correction dates inside the window. NULL (not an empty array) when the non-compliance join did not answer - see violations_status.
high_risk_flagTrue when deficiency_weighted_score_2y meets or exceeds highRiskThreshold. NULL when the non-compliance join did not run or did not answer for this operation - v1.0 emitted false in that case, asserting a childcare operation was not high-risk on a check it never performed. Use high_risk_flag_lifetime for a signal that is always available.
is_new_operationTrue when the operation was absent from the previous run baseline for this filter scope. NULL on a seeding run (nothing has been compared yet) and in roster mode.
source_urlOfficial source dataset URL.
administrator_director_nameNamed decision-maker at the operation, as published by TX HHSC. Populated on 69.1% of the active roster. v1.0 fetched this column and discarded it.
mailing_addressOperation mailing address (99.1% populated). Often differs from the physical address for home-based and multi-site operators.
location_addressPhysical location address as published (99.1% populated).
hours_of_operationPublished operating hours.
days_of_operationPublished operating days (97.6% populated).
care_typeHHSC care-type classification (66.6% populated; TX leaves it blank for the rest).
contact_channelsWhich contactable channels this row actually carries: any of "phone", "email", "website", "named_contact". Lets you filter to genuinely reachable leads instead of discovering the gap after export.
has_phoneTrue when a phone number is published. 99.6% of the active roster.
has_emailTrue when an email address is published. Only 56.6% of the active roster carries one - this is the sparsest contact field and is stated rather than implied.
has_named_contactTrue when administrator_director_name is published (69.1%).
operation_statusRaw HHSC operation_status: "Y" active, "N" inactive.
is_activeoperation_status decoded. Null when HHSC publishes no status.
type_of_issuancePermit type: Full Permit, Registered, Listed, Initial, Certified, Renewed Initial.
conditions_on_permitTrue when HHSC has attached conditions to the permit (1,502 of 14,983 statewide). Null when not published.
deficiency_high_totalHHSC-published count of High-risk deficiencies for this operation, straight from the roster record.
deficiency_medium_high_totalHHSC-published Medium High deficiency count.
deficiency_medium_totalHHSC-published Medium deficiency count.
deficiency_medium_low_totalHHSC-published Medium Low deficiency count.
deficiency_low_totalHHSC-published Low deficiency count.
deficiency_count_totalSum of the five HHSC-published deficiency counts. Verified live against the non-compliance table: operation 97587 sums to 214 and the table holds exactly 214 rows. Null only when HHSC publishes none of the five columns.
deficiency_weighted_score_totalThe same editorial weighting as deficiency_weighted_score_2y (High 5, Medium High 3, Medium 2, Medium Low 1, Low 0.5) applied to the HHSC lifetime counts. Available on every row without the optional join.
total_inspectionsHHSC-published inspection count for the operation.
total_assessmentsHHSC-published assessment count.
total_reportsHHSC-published investigation/report count.
total_self_reportsHHSC-published self-report count.
corrective_actionTrue when HHSC has an open corrective action against the operation (31 of 14,983 statewide). Null when not published.
adverse_actionTrue when HHSC has taken adverse action (31 of 14,983 statewide). Null when not published.
temporarily_closedTrue when the operation is temporarily closed (10 of 14,983 statewide). Null when not published.
open_foster_homesFor child-placing agencies: number of open foster homes.
open_branch_officesNumber of open branch offices.
programmatic_servicesProgrammatic services text (4.1% populated - residential operations only).
treatment_servicesTreatment services text (3.4% populated - residential operations only).
roster_status"ok" when the HHSC roster record for this operation was retrieved.
violations_status"ok" (the 2-year non-compliance join answered for this operation), "unavailable" (its batch failed or was truncated) or "not_requested" (includeCompliance was false). When it is not "ok", deficiency_count_2y and high_risk_flag are NULL rather than 0/false.
compliance_window_basisExactly what the 2-year window measured. The TX non-compliance table has NO citation or inspection date, so the window keys off corrected_date - the date the deficiency was CORRECTED, not cited. Null when the join did not run.
capacity_knownFalse when TX publishes no total_capacity for the operation (142 of 14,937 active, 141 of them Child Placing Agencies).
capacity_filter_applied"not_applied", "passed", or "kept_unknown_capacity" - the last meaning a minCapacity filter was set and this row was kept because its capacity is unpublished, not because it met the threshold. v1.0 silently deleted these rows.
high_risk_flag_lifetimedeficiency_weighted_score_total at or above highRiskThreshold. Derived from HHSC-published counts, so it is available even when the optional 2-year join is off or fails. Null only when HHSC publishes no deficiency counts.
enforcement_flagTrue when any of corrective_action, adverse_action or temporarily_closed is set. Null when none of the three is published.
deficiencies_corrected_at_inspection_2yHow many of the windowed deficiencies were corrected on the spot at inspection (10.7% of the table statewide) - a lower-severity signal than one requiring a later correction. Null when the join did not answer.
delta_baseline_status"ok" (a real cross-run baseline was loaded), "seeded_this_run" (first run for this filter scope; nothing has been compared yet) or "not_applicable" (roster mode).
run_mode"roster" or "new_operations".

Data sources (Texas HHSC, keyless Socrata)

  • HHSC CCL Daycare and Residential Operations Data (bc5r-88dy) - 14,983 operations, 14,937 active. Refreshed daily; newest permit issuance was 1 day old when measured.
  • HHSC CCL Non-Compliance Data (tqgd-mf4x) - 138,974 deficiency records, joined on operation_id.

Live drift assertions

The actor checks the upstream before producing a single billable row, and fails the run loudly if any of these regress:

  • both datasets resolve and still publish every column the actor reads (including deficiency_high and administrator_director_name)
  • a negative control (county = 'ZZZZ_NOT_A_REAL_COUNTY') returns exactly 0 rows - proof the $where clause is being applied
  • closed vocabularies: standard_risk_level stays inside {High, Medium High, Medium, Medium Low, Low}; operation_status inside {Y, N}; corrective_action / adverse_action / temporarily_closed inside {YES, NO}. An unrecognised risk level would otherwise be silently scored 1
  • dataset sizes stay inside measured bands (roster 8k-40k against 14,983; non-compliance 50k-500k against 138,974)
  • the newest permit issuance is within 180 days (measured: 1 day)

Every measured value is written to the run log, so tightening a band later is evidence-based.

Use as an MCP tool

Callable by AI agents (Claude, Cursor, etc.) via mcp.apify.com. The violations_status and contact_channels fields let an agent tell a verified negative from an unanswered question, and a reachable lead from an unreachable one.

Honest notes & limitations

  • Texas only in v1. Florida DCF and California CCLD have no verified keyless machine endpoint; they are scaffolded and disabled rather than faked.
  • The 2-year window measures corrections, not citations. The TX non-compliance table publishes no citation or inspection date. corrected_date is the only usable timestamp, so deficiency_count_2y counts deficiencies corrected in the last two years. Every row states this in compliance_window_basis. Measured live: corrected_date is populated on 138,974 of 138,974 rows, and a 2-year window covers 43.0% of the table - the rest are older corrections, not uncorrected violations. For a citation-anchored view use the HHSC lifetime counts (deficiency_count_total).
  • The risk weighting is editorial. High 5, Medium High 3, Medium 2, Medium Low 1, Low 0.5 is this actor's scale, not an HHSC measure. deficiency_high_total and friends are the raw HHSC numbers if you would rather weight them yourself.
  • Deficiency counts are not a quality verdict. A large centre inspected 91 times will out-score a small home inspected twice. Read total_inspections alongside the counts.
  • temporarily_closed, corrective_action and adverse_action are rare (10, 31 and 31 operations statewide) - which is exactly what makes them worth filtering on.
  • No emails for 43.4% of the roster. See the table at the top.

FAQ

How do I get only leads I can actually email? Filter has_email = true, or contact_channels containing "email". That is 56.6% of the active roster statewide.

How do I reach a decision-maker rather than a front desk? administrator_director_name carries the named administrator or director on 69.1% of operations; combine with has_named_contact = true.

Why is high_risk_flag sometimes null? Because the actor did not check. null means the non-compliance join did not run (you set includeCompliance: false) or did not answer for that operation; false means it ran and the score was under your threshold. violations_status tells you which. high_risk_flag_lifetime is derived from HHSC's own published counts and is available either way.

Which risk score should I use? deficiency_count_total / high_risk_flag_lifetime for a complete, always-available picture, and deficiency_count_2y / high_risk_flag when recency matters more than completeness.

How do I get alerts for newly licensed daycares? Set mode to new_operations and schedule the actor. The first run for a given filter combination seeds a baseline and emits the full roster with is_new_operation: null; every later run emits only operations that were absent from the baseline.

Does a minimum capacity filter drop anything unexpected? Only in the sense that it keeps more than you might expect: operations with no published capacity are retained and marked kept_unknown_capacity rather than treated as capacity 0.

Pricing

Pay per result: you are charged only for the provider records actually emitted. A run that fails a drift assertion emits nothing and bills nothing.

ActorWhat it adds
License VerifierProfessional-licence verification across 19 boards in 9 states
City Business License LeadsNewly licensed businesses by city, for the same outbound motion
Liquor License New Openings TrackerNew TX / NY / FL licence applications as an opening signal

Verified inputs that populate every field

A few fields are legitimately null on a typical daycare run because Texas only publishes them for certain operation types. Each has a verified live input, so nothing here is a permanently empty column:

FieldNull on the default run becauseInput that populates it (verified live 2026-08-01)
programmatic_services, treatment_servicesResidential operations only (4.1% / 3.4% of the roster){"operationType": "General Residential Operation"} - 25/25 rows populated, e.g. "Child Care" / "Emotional Disorders"
is_new_operationRoster mode never compares against a baseline{"mode": "new_operations"} on the second run for a filter scope
deficiency_count_2y, high_risk_flag, recent_deficiency_datesincludeCompliance was false, or the join did not answer{"includeCompliance": true} - and violations_status says which case you are in
open_foster_homesOnly meaningful for child-placing and residential operations{"operationType": "Child Placing Agency"}

Measured on the actor's own default input (Harris County, Licensed Center, 100 rows): phone 99%, administrator_director_name 77%, email 44%, website 29%. Harris County licensed centers publish email less often than the statewide average of 56.6% - both numbers are given so neither is a surprise.