You're closer than you think. County data is the right instinct, the issue is you're pulling one list at a time. The free lists individually are weak, but when you stack a few distress signals on the same property, that's where the motivated sellers hide and that's what makes your leads better than what BatchLeads shovels out.
Here are the free sources for your two counties specifically.
Montgomery County (Dayton):
Auditor property search for owner info and absentee owners: https://www.mcrealestate.org
Sheriff sales / pre-foreclosure list: https://www.mcohiosheriff.org/support_services/records_and_p...
For code violations, stop fighting the website. Dayton's Housing Inspection division will tell you a property's nuisance status directly if you contact them. The county's "Buy With Confidence" page has their info plus how the nuisance and demolition lists work: https://www.mcohio.org/1480/Buy-With-Confidence
Delinquent taxes: Montgomery County Treasurer's office
Greene County (Xenia, Beavercreek, Fairborn):
Auditor search: https://auditor.greenecountyohio.gov/Search/Name
Delinquent tax search tool: https://www.greenecountyohio.gov/506/Delinquent-Taxes
Foreclosures: https://www.greenecountyohio.gov/507/Foreclosures
The method that actually works on a budget: pull the tax delinquent list and the pre-foreclosure/sheriff sale list, then cross-reference against the auditor data to flag absentee owners (mailing address different from property address) and long-time owners with high equity. A property that's tax delinquent AND absentee AND has a code violation is a seller who is basically raising their hand. That short, stacked list will outperform 10,000 random skip-traced records every time, and it costs you nothing but time.
Once you've got the addresses, you only pay for skip tracing on that filtered list, which keeps your cost per lead tiny.
Happy to walk you through the stacking part if you get stuck, feel free to reach out.