If you sell to local businesses, you need a list before you can do anything else. Copying listings out of a directory by hand works for 20 businesses and falls apart at 200. This walkthrough gets you a clean spreadsheet of US businesses from YellowPages.com in about ten minutes, for well under a dollar.
Full disclosure: the scraper used here is one I built and sell on Apify. The steps for cleaning and checking the list work the same with any source.
Step 1: Pick one niche and one city
Start narrow. "Roofing contractors in Austin, TX" gives you a list you can write a single pitch for. "Home services in Texas" gives you a pile of businesses with nothing in common.
Write down three things before you start:
- Search terms: the words a customer would type, such as
roofing contractorsordentist - Locations:
City, STor a ZIP code, US only - Size: how many businesses you can actually follow up with
If you want more than one search, every term runs in every location. Two terms in three cities is six searches.
Step 2: Do a small test run
Create a free Apify account, open the YellowPages scraper and paste this into the JSON input tab:
{ "searchTerms": ["roofing contractors"], "locations": ["Austin, TX"], "maxResults": 20 } maxResults applies per term and location pair, and you pay per business saved, so keep it at 20 until the output looks right. Sponsored ads are left out by default, which you usually want.
Press Start. When it finishes, look at the results and ask two questions. Are these the businesses you meant? Do the listings have the phone and website columns filled in? If the results look off, change the search term before you spend more. "Roofing contractors" and "roofers" can return different results, so try both.
Step 3: Run the full list
Raise maxResults to the size you want. Setting it to 0 pulls everything for that search, up to about 3,000 businesses.
Add includeDetails if you need email addresses:
{ "searchTerms": ["roofing contractors"], "locations": ["Austin, TX"], "maxResults": 250, "includeDetails": true } This opens each business page to collect email (when one is listed), hours, description, social links and year founded. It's slower. Many listings have no email, so expect blanks in that column.
At $1.50 per 1,000 results, 250 businesses costs about 38 cents, plus a tiny fee to start the run.
If you'd rather script it, Apify's API runs the same job and returns a CSV:
curl -X POST \ "https://api.apify.com/v2/acts/rel8ble~yellowpages-scraper/run-sync-get-dataset-items?format=csv" \ -H "Authorization: Bearer $APIFY_TOKEN" \ -H "Content-Type: application/json" \ -d '{"searchTerms":["roofing contractors"],"locations":["Austin, TX"],"maxResults":250}' \ -o leads.csv The synchronous endpoint can time out on long runs. For a big list, start a normal run and download the dataset when it's done.
Step 4: Clean it in a spreadsheet
Export the results as CSV and open the file. A raw export needs a few minutes of work:
- Remove columns you won't use. Name, phone, address, website, category and rating are usually enough. Keep email if you collected it.
- Remove duplicates by phone number. A business can appear under several listings, and the phone number is a more reliable match than the name.
- Check the addresses. Directory results can include businesses from nearby towns. Filter by city and decide whether those are in your territory.
- Check the categories. Search terms catch near matches, so a roofing search may return general contractors or supply stores. Delete any that you can't sell to.
Step 5: Add one column that makes it useful
A list becomes useful when it tells you who to contact first. Add a priority column and sort on something you can see in the data:
- Selling websites: businesses with an empty website column go first, after you search the name to confirm the directory isn't just missing the URL.
- Selling reputation services: businesses with a low rating or few reviews go first.
- Selling to established companies: use the years in business field to find the ones that have been around for a while.
Spot-check 10 rows against the live listing before you rely on the list. Directory data goes stale. Phones get disconnected and businesses close, so check any lead before you build a pitch around it.
Before you contact anyone
Check the rules that apply to you. In the US, CAN-SPAM requires a real postal address and a working opt-out in commercial email, and calls and texts have their own rules, including the Do Not Call registry. Other countries can be stricter, and some require consent first.
If you'd rather have someone else do this, I pull 250 local leads for $30 at fiverr.com/rel8ble.
Written with AI assistance.
![How to Use shadcn/ui in React Native Applications [Full Handbook]](https://cdn.hashnode.com/uploads/covers/5e0f2c2e490269cb30227a2b/a30e05d8-efcb-41ed-ad2c-fd22763d7ea2.png)

