# StreetDirectory Scraper — Singapore Business Leads (`scrapesage/streetdirectory-business-scraper`) Actor

Scrape Singapore business leads from StreetDirectory: name, phone, website, full address, postal code, category and email. Browse by category or industry group, paginate A–Z, and monitor newly listed businesses. Optional website email enrichment. No start fee.

- **URL**: https://apify.com/scrapesage/streetdirectory-business-scraper.md
- **Developed by:** [Scrape Sage](https://apify.com/scrapesage) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 business lead scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## StreetDirectory Scraper — Singapore Business Leads (Phone, Email & Website)

Extract **complete Singapore business data from [StreetDirectory](https://www.streetdirectory.com/businessfinder/)** — Singapore's homegrown business directory. Build targeted B2B lead lists for any category with **company name, phone number(s), website, full street address + postal code, opening hours, description, category and listing tier** — and, from each business's profile page, its **email address**. Optionally crawl each business's own website for extra emails and social links.

No login, no cookies, no browser — fast structured-data extraction, with a **Monitor mode** that returns only newly listed businesses and **no start fee**.

### Why this StreetDirectory scraper?

StreetDirectory's businessfinder is one of the largest directories of Singapore companies, but the data is locked in old, table-based pages. This actor turns it into clean, structured **contactable leads** — the richest StreetDirectory dataset available, and the only one that pulls the **email address** from each business profile.

| Data | This actor |
|---|---|
| Company name, category, listing tier | ✅ |
| Phone number(s) | ✅ |
| Website | ✅ |
| **Email address (from the business profile page)** | ✅ |
| Full street address + **postal code** | ✅ |
| Opening hours | ✅ |
| Description + services/sub-categories | ✅ |
| **Website email enrichment (extra emails + socials)** | ✅ opt-in |
| **Monitor mode** — only new (or changed) businesses | ✅ |
| Browse by category, whole industry group, or URL | ✅ |
| A–Z pagination to capture every business in a category | ✅ |
| No start fee | ✅ |

### Use cases

- **B2B lead generation** — build cold-outreach lists of Singapore businesses by category (accountants, renovation contractors, hair salons, law firms, clinics, restaurants…) with phone, email and website ready to contact.
- **Sales & market mapping** — size a sector, map competitors, and segment by area/postal code for territory planning.
- **New-business monitoring** — run **Monitor mode** on a daily [Schedule](https://docs.apify.com/platform/schedules) to get a fresh feed of businesses newly listed in a category or industry group.
- **CRM & data enrichment** — append phone, email, website and address to your existing Singapore company records.
- **Local SEO & directories** — power niche directories, comparison sites and lead-routing apps with structured Singapore business data.

### How to use

1. [Sign up for Apify](https://console.apify.com/sign-up) — the free plan is enough to try this actor.
2. Open the **StreetDirectory Scraper**, enter **categories** (e.g. `Accountant`, `Hair Salons`), choose an **industry group**, or paste **category/business URLs**. Click **Start**.
3. Watch results stream into the dataset table.
4. **Export** as JSON, CSV, Excel, XML, or RSS — or pull results programmatically via the [Apify API](https://docs.apify.com/api/v2).

### Input

```json
{
    "categories": ["Accountant", "Hair Salons"],
    "browseGroups": ["medical"],
    "paginateAllLetters": true,
    "scrapeProfiles": true,
    "enrichEmails": true,
    "maxItems": 500,
    "monitorMode": false,
    "proxyConfiguration": { "useApifyProxy": true }
}
```

- **categories** — business categories by name (`Accountant`) or full category URL (`https://www.streetdirectory.com/businessfinder/company/3/Accountant/`). Names are matched against StreetDirectory's category index.
- **browseGroups** — scrape every category in a whole industry group: `restaurant`, `business`, `industrial`, `medical`, `automotive`, `top_20_category`.
- **startUrls** — paste category URLs, group URLs, or individual business profile URLs.
- **paginateAllLetters** *(default true)* — follow A–Z pagination to capture every business in a category.
- **scrapeProfiles** *(default true)* — open each business profile page for its email, full address + postal code, opening hours and extra phones.
- **enrichEmails** *(default false)* — additionally crawl each business website for more emails, a phone, a contact-form URL and socials.
- **monitorMode** *(default false)* — only output businesses new since the last run for the same input.

### Output

One record per business (`type: "business"`):

```json
{
    "type": "business",
    "name": "CoSeClinic Services Pte Ltd",
    "category": "Accountant",
    "categoryId": "3",
    "description": "We are a team of Chartered Accountants offering incorporation, secretarial, accounting, tax, audit and advisory services.",
    "phone": "+6562701163",
    "phones": ["+6562701163"],
    "email": "enquiry@coseclinic.com",
    "website": "https://coseclinic.com",
    "address": "7030 Ang Mo Kio Avenue 5 #09-90/92 Northstar@AMK Singapore 569880",
    "postalCode": "569880",
    "openingHours": "Mon - Fri: 9am - 5.30pm",
    "services": ["Accounting Services", "Company Incorporation", "Corporate Secretarial Services", "Tax Consultant"],
    "listingTier": "free",
    "companyId": "127834",
    "branchId": "170634",
    "profileUrl": "https://www.streetdirectory.com/CoSeClinic/",
    "hasEmail": true,
    "hasWebsite": true,
    "hasPhone": true,
    "scrapedAt": "2026-06-12T19:40:00.000Z"
}
```

Fields are `null` only when a business doesn't publish them — premium listings tend to be the most complete.

### Monitor new businesses automatically

**Monitor mode** persists a small state file in a named key-value store (keyed by your input) and, on each run, emits **only businesses it hasn't seen before** — perfect for a daily feed of newly listed companies in a category or sector. It is fully independent of Apify's scheduler: [Schedules](https://docs.apify.com/platform/schedules) decide *when* the actor runs, monitor mode decides *which* businesses are worth returning. Combine the two without re-pulling — or re-paying for — unchanged businesses.

### Automate & schedule

- **[Apify API](https://docs.apify.com/api/v2)** — start runs, fetch datasets, and manage schedules over REST.
- **[apify-client for JavaScript](https://docs.apify.com/api/client/js/)** and **[apify-client for Python](https://docs.apify.com/api/client/python/)** — official SDKs.
- **[Schedules](https://docs.apify.com/platform/schedules)** — run it daily/weekly to monitor newly listed businesses or refresh a sector; perfect for lead pipelines and CRMs.
- **[Webhooks](https://docs.apify.com/platform/integrations/webhooks)** — trigger downstream actions (CRM import, Slack alert, email sequence) the moment a run finishes.

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });

const run = await client.actor('scrapesage/streetdirectory-business-scraper').call({
    categories: ['Accountant'],
    scrapeProfiles: true,
    enrichEmails: true,
    maxItems: 500,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} Singapore business leads`);
```

### Integrate with any app

- **[Make](https://docs.apify.com/platform/integrations/make)** — multi-step automation scenarios.
- **[Zapier](https://docs.apify.com/platform/integrations/zapier)** — push new business leads straight into your CRM.
- **[Slack](https://docs.apify.com/platform/integrations/slack)** — get notified when a monitored category finds new businesses.
- **[Google Drive / Sheets](https://docs.apify.com/platform/integrations/drive)** — auto-export every run to a spreadsheet.
- **[Airbyte](https://docs.apify.com/platform/integrations/airbyte)** — pipe results into your data warehouse.
- **[GitHub](https://docs.apify.com/platform/integrations/github)** — trigger runs from commits or releases.

### Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. Call this actor from Claude, ChatGPT, or any agent framework through the **[Apify MCP server](https://docs.apify.com/platform/integrations/mcp)** — ask your assistant to "find renovation contractors in Singapore and list their phone and email" and let it run this scraper for you.

### Agent-ready: autonomous payments (x402 & Skyfire)

This actor is **agent-ready** — AI agents can discover it, run it, and **pay for it autonomously**, with no Apify account and no human in the loop. It uses [pay-per-event](https://docs.apify.com/platform/actors/publishing/monetize/pay-per-event) pricing and [limited permissions](https://docs.apify.com/platform/actors/development/permissions), so it qualifies for Apify's agentic-payment standards:

- **[x402](https://docs.apify.com/platform/integrations/x402)** — an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp) — no account, no API key.
- **[Skyfire](https://docs.apify.com/platform/integrations/skyfire)** — agent-to-service payments for fully autonomous AI-agent workflows.

Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.

### More scrapers from scrapesage

Build a complete Singapore + B2B lead-gen stack:

- **[SGCarMart Used Car Scraper](https://apify.com/scrapesage/sgcarmart-used-car-scraper)** — Singapore used-car listings, prices and dealer leads.
- **[Multi-ATS Job Scraper](https://apify.com/scrapesage/multi-ats-job-scraper)** — jobs from Greenhouse, Lever, Ashby, SmartRecruiters & Workday (hiring-intent signals).
- **[LinkedIn Jobs Scraper](https://apify.com/scrapesage/linkedin-jobs-scraper)** — job postings as hiring-intent signals.
- **[Facebook Ad Library Scraper](https://apify.com/scrapesage/facebook-ad-library-scraper)** — competitor ad intelligence.
- **[Google Ads Transparency Scraper](https://apify.com/scrapesage/google-ads-transparency-scraper)** — who's advertising what on Google.
- **[Bark Listing Scraper](https://apify.com/scrapesage/bark-listing-scraper)** — service-provider leads from Bark.
- **[Eventbrite Scraper](https://apify.com/scrapesage/eventbrite-scraper)** — events plus organizer leads (emails & socials).

### Tips

- **Targeted lead lists**: use `categories` with `paginateAllLetters` on to pull every business in a category, then turn on `enrichEmails` for extra contacts.
- **Whole sectors**: set `browseGroups` (e.g. `medical`) to scrape every category in that industry at once.
- **Fresh-business feed**: turn on `monitorMode` and put the actor on a daily [Schedule](https://docs.apify.com/platform/schedules) — each run returns only businesses listed since the last one.
- **Exact targets**: paste a category's `/businessfinder/company/<id>/<Name>/` URL (copy it from the site) for a guaranteed match, or a business profile URL to scrape just that business.

### FAQ

**Where does the data come from?** From public business listings on [StreetDirectory's businessfinder](https://www.streetdirectory.com/businessfinder/). No login or API key is required.

**How do I get email addresses?** Keep `scrapeProfiles` on — the actor reads each business's StreetDirectory profile page, which lists the business email. Turn on `enrichEmails` to also pull emails from the business's own website.

**Can I scrape a whole industry?** Yes — use `browseGroups` to scrape every category in a sector (e.g. `medical`, `automotive`), or list multiple `categories`.

**How do I monitor newly listed businesses?** Turn on `monitorMode` and create a daily [Schedule](https://docs.apify.com/platform/schedules). Each run emits only businesses not seen before for that input. Add a [webhook](https://docs.apify.com/platform/integrations/webhooks) or [Zapier zap](https://docs.apify.com/platform/integrations/zapier) to push new leads into your CRM automatically.

**Does monitor mode conflict with Apify Schedules?** No. Schedules control *when* runs happen; monitor mode controls *which* businesses are returned. They work together.

**Is this legal?** The actor collects publicly available business information only. You are responsible for using the data in compliance with applicable laws (including Singapore's PDPA and the GDPR/CCPA where relevant) and the source website's terms.

### Need help?

Open an issue on the actor's **Issues** tab, or visit the [Apify help center](https://help.apify.com/). Feature requests are welcome — this actor is actively maintained.

# Actor input Schema

## `categories` (type: `array`):

Business categories to scrape. Enter a category name (<code>Accountant</code>, <code>Hair Salons</code>, <code>Renovation</code>), or paste a full category URL (<code>https://www.streetdirectory.com/businessfinder/company/3/Accountant/</code>). Names are matched against StreetDirectory's category index. Browse categories at <code>streetdirectory.com/businessfinder/</code>.

## `browseGroups` (type: `array`):

Scrape every category within one or more top-level industry groups. Great for building large lead lists across a whole sector.

## `startUrls` (type: `array`):

Paste StreetDirectory URLs directly: category pages (<code>/businessfinder/company/...</code>) to scrape every business listed, group pages (<code>/businessfinder/medical/</code>), or individual business profile pages (e.g. <code>https://www.streetdirectory.com/lo-hock-ling/</code>).

## `paginateAllLetters` (type: `boolean`):

Follow StreetDirectory's A–Z pagination to collect every business in a category, not just the first page. Turn off for a fast sample of the top listings per category.

## `scrapeProfiles` (type: `boolean`):

Open each business's StreetDirectory profile page to add its <b>email address</b>, full street address + postal code, opening hours and any extra phone numbers. This is what turns a listing into a contactable lead. Turn off for a faster, listing-only run.

## `enrichEmails` (type: `boolean`):

When a business lists a website, crawl it (home + contact/about, up to 3 pages) for additional contact emails, a phone number, a contact-form URL and social links (LinkedIn, Facebook, Instagram).

## `maxItems` (type: `integer`):

Maximum number of businesses to scrape across all targets. Use 0 for no limit.

## `monitorMode` (type: `boolean`):

Only output businesses that are <b>new</b> since the previous run for the same input. State persists across runs in a named key-value store, so this pairs perfectly with Apify Schedules to track newly listed businesses in a category or sector over time without re-pulling — or re-billing — unchanged listings.

## `monitorTrackChanges` (type: `boolean`):

When monitor mode is on, also re-fetch businesses seen in previous runs and re-emit any whose phone or website changed. Costs more (known businesses are re-fetched). Leave off to treat only brand-new businesses as changes.

## `maxConcurrency` (type: `integer`):

Maximum number of pages fetched in parallel.

## `proxyConfiguration` (type: `object`):

Proxies to use. The default Apify Proxy works well for StreetDirectory; switch to Residential only if you hit blocks on very large runs.

## Actor input object example

```json
{
  "categories": [
    "Accountant"
  ],
  "browseGroups": [],
  "paginateAllLetters": true,
  "scrapeProfiles": true,
  "enrichEmails": false,
  "maxItems": 100,
  "monitorMode": false,
  "monitorTrackChanges": false,
  "maxConcurrency": 8,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

All scraped business lead records as JSON items in the default dataset.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "categories": [
        "Accountant"
    ],
    "maxItems": 100,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapesage/streetdirectory-business-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "categories": ["Accountant"],
    "maxItems": 100,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapesage/streetdirectory-business-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "categories": [
    "Accountant"
  ],
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call scrapesage/streetdirectory-business-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=scrapesage/streetdirectory-business-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/5arovpSwpXT8PjBFB/builds/8qv9H6ZO8pIYzTRbc/openapi.json
