<!-- canonical: https://opsblu.com/docs/recipes/find-businesses-with-no-website/ -->
# Find businesses with no website in a city

Source: https://opsblu.com/docs/recipes/find-businesses-with-no-website/

**Goal.** Pull every business in one city and category that has no website, check the count for free, then export the list as CSV with phones and emails.

**For:** Web design agencies (https://opsblu.com/for/web-design-agencies)

**MCP tools used:** `territory_stats`, `search_businesses`, `get_business`

**Cost.** 250 records ≈ 750 credits ≈ $7.50. Records flagged hot (new in the last 30 days) cost 10 credits instead of 3, so a list with 10% hot runs ≈ $9.25.

## REST walkthrough

### 1. Check the size of the opportunity (free)

Aggregates never cost credits and never return names. Use them to pick the city and category before you spend anything.

```bash
curl "https://opsblu.com/v1/stats?state=oregon&city=portland&category=landscapers"

# → {"total": 212, "depth": {"no_website": 97, "phones": 190, "emails": 61, ...}, ...}
```

### 2. List the matches (free: names + signals, no contacts)

```bash
curl -H "Authorization: Bearer ob_live_YOUR_KEY" \
  "https://opsblu.com/v1/businesses?state=oregon&city=portland&category=landscapers&no_website=true&has_phone=true&limit=100"

# → {"items":[{"id":"ob_por_lan_0012","name":"…","signals":{"no_website":true,"hot":false,...},"has_phone":true}],
#    "total": 91, "next_cursor": "MTAw", "estimate": {"records": 91, "hot_records": 7, "credits": 322, "usd": 3.22}}
```

### 3. Create the export and read the estimate (nothing charged yet)

```bash
curl -X POST -H "Authorization: Bearer ob_live_YOUR_KEY" -H "Content-Type: application/json" \
  -d '{"filters":{"state":"oregon","city":"portland","category":"landscapers","no_website":true,"has_phone":true}}' \
  https://opsblu.com/v1/exports

# → {"export_id":"exp_7f…","status":"pending_confirm","estimated_credits":322,"rows":91,...}
```

### 4. Confirm, then download the CSV

Confirming charges the estimate (minus anything you already opened this month) and makes the file available for 7 days.

```bash
curl -X POST -H "Authorization: Bearer ob_live_YOUR_KEY" https://opsblu.com/v1/exports/exp_7f…/confirm
curl -H "Authorization: Bearer ob_live_YOUR_KEY" -o portland-landscapers-no-site.csv \
  https://opsblu.com/v1/exports/exp_7f…/download
```

## Agent prompt

Paste into Claude, ChatGPT or Cursor with the OpsBlu MCP server connected (`https://opsblu.com/mcp`).

```text
Using OpsBlu: run territory_stats for landscapers in Portland, Oregon and tell me how many have no website. If it is over 50, call search_businesses with no_website=true and has_phone=true, show me the first 10 names with their signals, and tell me the credit cost to export all of them. Do not open any records until I confirm.
```


## Gotchas

- Phone coverage is high (~90%) but email coverage for no-website businesses is low (~12%). Filter has_phone=true if you plan to call.
- Records you opened earlier this month are free in the export estimate (already_revealed).
- Category slugs are a controlled vocabulary. GET /v1/categories lists them.

More recipes: https://opsblu.com/docs/recipes/ · API reference: https://opsblu.com/docs/api · MCP setup: https://opsblu.com/docs/mcp · Pricing: https://opsblu.com/pricing
