# ServiceSeeking Scraper - Australian Tradie Leads with ABN (`scrapersdelight/serviceseeking-au-scraper`) Actor

From $3.50 per 1,000 businesses, no start fee. Australian tradies and service businesses from ServiceSeeking.com.au: ABN with ATO checksum, website, suburb, state, postcode, coordinates, licences, rating, reviews, times hired, last quoted and services. By trade, state or whole directory.

- **URL**: https://apify.com/scrapersdelight/serviceseeking-au-scraper.md
- **Developed by:** [Scrapers Delight](https://apify.com/scrapersdelight) (community)
- **Categories:** Lead generation, Business, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.50 / 1,000 per business returneds

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## 🧰 ServiceSeeking Scraper - Australian Tradie Leads with ABN

Australian tradies and service businesses from **ServiceSeeking.com.au**, one row per business profile. Every row carries the business's **ABN**, checked with the ATO's own checksum. It also has the website, suburb, state and postcode, map coordinates, trade licence numbers, rating and review count, how many times the business has been hired, when it last sent a quote, the year it joined, and the services it offers.

Pull a trade (plumbers, electricians, cleaners and about a thousand more), cut it to one or more states, or walk the whole directory of 10,312 profiles. No API key, no login and no browser.

### What does this actor do?

ServiceSeeking is an Australian marketplace where homeowners and businesses post jobs and local businesses quote for them. Each business keeps a public profile. This actor finds the profiles you ask for and reads each one:

- **By trade:** it walks ServiceSeeking's own category listing for each trade you name (`/plumbers`, `/electricians`, ...) to its last page. Businesses listed under two of your trades are fetched and charged once.
- **Whole directory:** it reads ServiceSeeking's profile sitemap (10,312 profiles on 2026-09-23), most recently updated first. Filter the result by service keyword and state.
- **By URL:** pass profile URLs or bare profile IDs.

**Who uses it**

- **Trade suppliers and wholesalers** (plumbing, electrical, building supplies) building territory lists of active tradies, with the ABN to match their own account records.
- **Tradie software** (job management, quoting, invoicing) prospecting businesses that already win work online. `hiredCount` and `lastQuotedText` show who is active.
- **Trade insurers and brokers** checking a business against its ABN and its published licence numbers.
- **Home-services lead-gen and marketing agencies** finding businesses by suburb and trade, with the website as the enrichment hook.

### 📋 What you get per business

Fill rates are measured on two live runs on 2026-09-23 (build 0.1.3). **Trade frame:** every electrician ServiceSeeking lists (333 cards, 320 live profiles delivered, 13 listed profiles no longer exist). **Directory frame:** 300 profiles from the whole directory, most recently updated first. A third, offline frame of **30 profiles drawn at random from the sitemap** shows the long tail of dormant profiles.

| Field | What it is | Trade frame | Directory frame | Random 30 |
|---|---|---|---|---|
| `businessName` | Business name as shown on the profile | 100% | 100% | 100% |
| `abn` | Australian Business Number, exactly as printed (spaces removed) | **100%** | **100%** | 80% |
| `abnFormatted` | The ABN as `44 685 187 544` | 100% | 100% | 80% |
| `abnChecksumValid` | `true` when the ABN passes the ATO checksum. It is never repaired. | 100% of ABNs | 100% of ABNs | 100% of ABNs |
| `website` | Website the business entered, shown on its profile | **40.0%** | **48.3%** | 20% |
| `websiteType` | `own-site`, `social` (Facebook, Instagram...) or `maps-or-search` (a Google link) | own-site 36.9% of rows | own-site 43.7% of rows | - |
| `websiteDomain` | Host of the website, `www.` removed | as website | as website | - |
| `aboutPhones` | Phone numbers the business wrote into its own public About text | 7.5% | 13.7% | 13% |
| `aboutEmails` | E-mail addresses the business wrote into its own public About text | 2.2% | 4.3% | 7% |
| `phone`, `phoneE164`, `phoneType` | Contact phone - **see "The phone number" below** | 0% by default | 0% by default | 0% by default |
| `undisplayedContactIncluded` | `true` when the row carries a phone or website the site does not display (option on only; billed as the add-on) | false by default | false by default | false by default |
| `licences` | Trade licences: `number` + `issuer` (e.g. `252716C`, NSW Fair Trading) | 73.4% | 18.3% | 3% |
| `suburb`, `state`, `postcode`, `locationText` | Base location | 99.7% | 100% | 100% |
| `latitude`, `longitude` | Map coordinates from the profile's structured data | 100% | 100% | 100% |
| `rating`, `reviewCount` | ServiceSeeking rating (1-5) and number of reviews. No reviews gives a `null` rating, never a 0. | 62.8% | 82.7% | 20% |
| `latestReviewDate` | Date of the newest review | 62.8% | 81.7% | - |
| `hiredCount` | Times hired through ServiceSeeking | 48.8% | 70.7% | 7% |
| `lastQuotedText`, `lastQuotedApproxDaysAgo` | When they last quoted ("20 days ago"), and that phrase as approximate days | 100% | 100% | 100% |
| `responseTime` | The profile's stated response time | as shown | as shown | - |
| `memberSince`, `memberSinceYear` | When the business joined ServiceSeeking | 100% | 100% | 100% |
| `contactFirstName` | The first name the profile shows as its contact | 100% | 100% | 100% |
| `serviceCategories`, `services` | Service categories and the individual services listed | 100% | 100% | 100% |
| `badges`, `awards`, `awardsCount` | Identity / ABN / Licenced / Insured badges, and awards such as "2025 Top 10 Plumber in Brisbane" | as shown | as shown | - |
| `abnVerifiedBadge`, `identityVerifiedBadge` | ServiceSeeking's "Provided a valid ABN" and "Provided proof of name and address" badges | as shown | as shown | - |
| `pricing` | Stated rate, e.g. `$180/hour Excludes GST` | 24.4% | 26.3% | - |
| `about` | The business's own description | as shown | as shown | - |
| `fullProfileDisplayed` | `true` when ServiceSeeking shows the website and licences on this profile | - | - | 43% |
| `onlineBookingAvailable`, `logoUrl` | Online-booking link present; logo image | - | - | - |
| `profileId`, `profileUrl` | ServiceSeeking's id and the canonical profile URL | 100% | 100% | 100% |
| `listedInCategories`, `discoveredVia`, `sitemapLastModified` | How the row was found; the sitemap's last-modified date in whole-directory mode | 100% | 100% | - |

The trade frame holds every electrician ServiceSeeking lists. The directory frame is the 300 most recently updated profiles. That is why rating, hires and websites run higher there. Profiles deep in the sitemap are often dormant: in the random 30, 15 had never sent a quote. **Use `quotedWithinDays` or `minReviews` to keep only live businesses.**

### ☎️ The phone number

ServiceSeeking's page data holds a contact phone for **every** profile we sampled (55 of 55). Its profile pages do not show that number to visitors unless the business has made it viewable, and **none of the 55 had**. The site's own profile code draws the "Call Now" button only when a `viewableMobilePhone` flag is true. It also shows the website and licences only on full profiles (`fullProfileDisplayed`).

This actor follows the site's display rule by default:

- `phone` is `null` unless the profile displays it. `phoneWithheld: true` tells you a number exists.
- `website` and `licences` come only from profiles that display them. `websiteWithheld` and `licencesWithheld` flag the rest.
- Numbers and e-mails the business wrote into its own public About text are always delivered, in `aboutPhones` and `aboutEmails`.

**`includeUndisplayedContacts: true`** also delivers the phone and website the page data carries but the site does not display. With it on, `phone` is filled on 100% of rows (55 of 55 sampled), along with `phoneE164` (for mobiles and landlines) and `phoneType` (`mobile`, `landline`, `local-rate` for 13/1300, `freecall` for 1800).

**Price with this option on:** $0.0035 per business, plus **$0.001** for each row that actually carries such a phone or website. That is **$0.0045** for those rows. Such rows have `undisplayedContactIncluded: true`. Rows without a hidden phone or website still cost $0.0035. With the option off, the add-on is never charged.

### Example row (real, from a live run on 2026-09-23)

```json
{
  "profileId": 124130,
  "profileUrl": "https://www.serviceseeking.com.au/profile/124130-kjb-electricians",
  "businessName": "KJB Electricians",
  "contactFirstName": "Jay",
  "phone": null,
  "phoneE164": null,
  "phoneType": null,
  "phoneDisplayedOnProfile": false,
  "phoneWithheld": true,
  "website": "https://www.google.co.uk/search?q=kjb+electrical+contractors&ie=UTF-8&oe=UTF-8&hl=en-gb&client=safari#trex=m_t:lcl_akp,rc_f:nav,rc_ludocids:7364676222621268368,rc_q:KJB%2520Electrical%2520Contractors,ru_q:KJB%2520Electrical%2520Contractors,trex_id:AJR6kf",
  "websiteDomain": "google.co.uk",
  "websiteType": "maps-or-search",
  "websiteWithheld": false,
  "aboutPhones": ["0416339882"],
  "aboutEmails": [],
  "abn": "62680360284",
  "abnFormatted": "62 680 360 284",
  "abnChecksumValid": true,
  "abnVerifiedBadge": true,
  "identityVerifiedBadge": true,
  "licences": [{ "number": "252716C", "issuer": "NSW Fair Trading Government Licensing Service" }],
  "licencesWithheld": false,
  "suburb": "Randwick",
  "state": "NSW",
  "postcode": "2031",
  "locationText": "Randwick, NSW, 2031",
  "latitude": -33.913164,
  "longitude": 151.241993,
  "rating": 5,
  "reviewCount": 22,
  "latestReviewDate": "2022-11-23T14:35:10+11:00",
  "hiredCount": 33,
  "lastQuotedText": "20 days ago",
  "lastQuotedApproxDaysAgo": 20,
  "responseTime": "Within minutes",
  "memberSince": "February 2016",
  "memberSinceYear": 2016,
  "badges": ["Identity", "Licenced", "ABN"],
  "awards": [],
  "awardsCount": 0,
  "serviceCategories": ["Electrician"],
  "services": ["Electrician", "Electrical safety inspection", "Light switch installation and repair", "Smoke alarm installation and replacement", "Cabling"],
  "pricing": null,
  "about": "Hello. I'm Jay, the owner and operator of KJB, a business I started 8 years ago. [...] Contact me today for a quote.\nJay 0416339882",
  "fullProfileDisplayed": true,
  "onlineBookingAvailable": false,
  "logoUrl": "https://s3-ap-southeast-2.amazonaws.com/uploads2.serviceseeking.com.au/provider_accounts/124130/small.png",
  "listedInCategories": ["electricians"],
  "discoveredVia": "category:electricians",
  "sitemapLastModified": null,
  "scrapedAt": "2026-09-23T05:23:36.818Z"
}
```

This row comes from build 0.1.3. `websiteType` and `undisplayedContactIncluded` (here `false`) were added in later builds, so the values shown for them here were computed from the same fields. `about` is shortened at `[...]`. The business entered a Google search link as its "website", and the row delivers it as entered. `websiteType: "maps-or-search"` flags it so you can skip it when enriching. This happens on 6 of 273 websites measured (another 18 are Facebook or Instagram pages).

### ⚙️ Input

| Input | Default | What it does |
|---|---|---|
| `categories` | `["plumbers"]` | Trades by name or URL slug: `plumbers`, `electricians`, `cleaners`, `builders`, `painters`, `air-conditioner-installation`... A full category URL works too. |
| `states` | all | `NSW`, `VIC`, `QLD`, `WA`, `SA`, `TAS`, `ACT`, `NT`. In trade mode this is checked against the listing card **before** the profile is fetched. |
| `wholeDirectory` | `false` | Walk every profile in ServiceSeeking's sitemap instead of trades, most recently updated first. |
| `profileUrls` | - | Specific profiles, as URLs or bare IDs. |
| `serviceKeywords` | - | Keep businesses whose services contain any of these words (`hot water`, `solar`, `strata`). "plumbers" also matches "Plumber". |
| `requireWebsite` / `requireAbn` / `requireContact` | `false` | Keep only rows with a website, with an ABN, or with any delivered phone, website or About-text contact. |
| `minReviews` | `0` | Minimum number of ServiceSeeking reviews. |
| `quotedWithinDays` | `0` | Liveness filter: last quote within about N days. Businesses that never quoted are excluded. |
| `memberSinceFrom` | `0` | Joined in this year or later, e.g. `2025` for newly listed businesses. |
| `includeUndisplayedContacts` | `false` | See "The phone number" above. |
| `maxResults` | `50` | Cap on businesses delivered **and charged**. `0` = no cap. |
| `maxPagesPerCategory` | `0` | Stop each trade after N listing pages (10 businesses each). |
| `proxyConfiguration` | off | ServiceSeeking needs no proxy. Turn one on only if direct requests start failing. |

Example: every NSW and VIC electrician who quoted in the last 3 months and has a website:

```json
{
  "categories": ["electricians"],
  "states": ["NSW", "VIC"],
  "quotedWithinDays": 90,
  "requireWebsite": true,
  "maxResults": 0
}
```

### 💰 Pricing

Two options, pay per event, **no start fee**:

| Option | Price | What you get |
|---|---|---|
| Default (`includeUndisplayedContacts` off) | **$0.0035 per business** ($3.50 per 1,000) | Every field, with the phone and website only where the profile displays them |
| `includeUndisplayedContacts` on | **$0.0035 per business + $0.001 per row carrying a hidden phone or website** (= $0.0045 for those rows) | Also the phone (100% of rows in a 150-row live run) and the website the site does not display |

The per-business price is charged once per business delivered to your dataset. The $0.001 add-on (`undisplayed-contact-unlocked`) is charged once per delivered row with `undisplayedContactIncluded: true`. Neither is charged for any of these:

- a business listed under two of your trades (fetched and charged once)
- a profile that no longer exists (13 of 333 listed electricians)
- a profile unreachable after retries
- a business your filters excluded

An empty-input run delivers at most 50 plumbers: $0.175 (the option is off by default). Every electrician ServiceSeeking lists (320) costs $1.12. The whole directory of about 10,300 profiles costs at most about $36. Profiles that no longer exist are not charged, so the real bill is lower.

### ⏱️ Speed

ServiceSeeking rate-limits each IP. Above about 1.5 requests a second it answers HTTP 429. This actor paces every request through one shared gate (about 1.4 requests a second). A 429 pauses the whole run and is then retried. Any profile or listing page still failing is retried once more at the end of the run. Measured speeds:

- 50 businesses (the default): about a minute
- all 320 electricians: 7.5 minutes
- 300 directory profiles: 6 minutes
- the whole directory (10,312 profiles): about 3.5 hours at that pace. The default run timeout is 5 hours. If you set a shorter one, every row delivered before it is kept and charged, and nothing else is.

Both measured runs finished with **0 unreachable profiles and 0 lost listing pages**, after 17 and 21 rate-limit pauses.

### 🛡️ What the actor guarantees

- **Pagination is floor-checked.** A trade crawled to its end must reach the last page its own pager links. If it stops short, the run fails loudly and does not hand you a partial list. It also fails if more than 10% of a trade's listing pages stay unreachable.
- **Pages are checked before parsing.** A page without its closing `</html>` or its own data markers is a transport failure and is retried. It is never parsed as half a record.
- **Deduplicated on ServiceSeeking's own business id** across trades, pages and retries, before anything is charged.
- **Three kinds of nothing are kept apart** in the `RUN_SUMMARY` record: `notFound` (the profile id no longer exists; ServiceSeeking answers with its homepage), `unreachable` (failed after retries) and `rejectedByFilter`. None is charged.
- **Nothing is invented.** ABNs, phone numbers and postcodes come out exactly as printed. A Darwin postcode printed as `800` stays `800`. A placeholder website such as `https://N/A` becomes `null`. A business with no reviews has a `null` rating, not 0. Platform e-mail addresses are never delivered as a business's own.

### Limits (measured, not guessed)

- **No e-mail field.** ServiceSeeking publishes no business e-mail. `aboutEmails` holds only what businesses wrote into their About text (2.2% to 4.3% of rows).
- **The phone is off by default.** See above. Without the switch, reachable contact means website (40% to 48%) plus About-text phones and e-mails. In the measured frames, 45.0% to 53.3% of rows carry at least one of these.
- **A trade listing is ServiceSeeking's list, not every business with that skill.** `/plumbers` listed 188 businesses. Another 82 profiles in the sitemap have "plumb" in their name but are not in that listing. To catch those, use `wholeDirectory` with `serviceKeywords`.
- **`lastQuotedApproxDaysAgo` is approximate.** The site prints phrases like "About 1 month ago" (30 days) or "Over 2 years ago" (730 days).

### Where the data comes from

Public pages on `www.serviceseeking.com.au`: the category listings, the business profile pages and the profile sitemap.

### FAQ

**Is there another ServiceSeeking actor?** Not as of 2026-09-23. We searched the Apify Store and its full sitemap census, and none targets ServiceSeeking.

**Can I monitor new businesses?** Yes. Run `wholeDirectory` with `memberSinceFrom` set to this year, on a schedule, and diff on `profileId`.

**Why is the ABN on rows where the website is hidden?** ServiceSeeking prints the ABN in every profile's page description, including profiles that hide the website.

# Actor input Schema

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

ServiceSeeking category pages to pull, by name or URL slug: plumbers, electricians, cleaners, builders, painters, gardeners, handymen, removalists, tilers, roofers, carpenters, concreters, fencing, pest-control, locksmiths, air-conditioner-installation and so on. A full category URL works too. Every business ServiceSeeking lists under the category is returned, deduplicated across categories. Ignored when 'Whole directory' or 'Profile URLs' is used.

## `states` (type: `array`):

Keep only businesses based in these states or territories. In category mode the state printed on each listing card is checked before the profile is even fetched. Empty = all of Australia.

## `wholeDirectory` (type: `boolean`):

Ignore categories and walk every business profile in ServiceSeeking's own profile sitemap (10,312 profiles on 2026-09-23), most recently updated first. Combine with 'Service keywords' and 'States' to cut it down. Set 'Max businesses' to 0 for all of them.

## `profileUrls` (type: `array`):

Specific profiles to fetch, e.g. https://www.serviceseeking.com.au/profile/249077 or just 249077. When filled, categories and the whole-directory switch are ignored.

## `serviceKeywords` (type: `array`):

Keep businesses whose listed services or service categories contain ANY of these words, e.g. hot water, solar, gas fitter, strata. Case is ignored and 'plumbers' also matches 'Plumber'. Most useful with 'Whole directory'. Empty = all.

## `requireWebsite` (type: `boolean`):

Keep only businesses with a website delivered in the row.

## `requireAbn` (type: `boolean`):

Keep only businesses that publish an Australian Business Number.

## `requireContact` (type: `boolean`):

Keep only businesses with at least one delivered phone, website, or phone/e-mail written in their own About text.

## `minReviews` (type: `integer`):

Keep only businesses with at least this many ServiceSeeking reviews. 0 = no minimum.

## `quotedWithinDays` (type: `integer`):

Keep only businesses that sent a quote on ServiceSeeking within roughly this many days - a liveness filter. ServiceSeeking prints only a phrase such as 'About 1 month ago', so this is approximate (a month counts as 30 days, a year as 365). Businesses that never quoted are excluded. 0 = off.

## `memberSinceFrom` (type: `integer`):

Keep only businesses that joined ServiceSeeking in this year or later, e.g. 2025 for newly listed businesses. 0 = off.

## `includeUndisplayedContacts` (type: `boolean`):

Off by default: rows follow ServiceSeeking's own display rule, so the phone is returned only when the profile shows it (none of 55 sampled did), and the website and licences only on full profiles. Price: $0.0035 per business. Turn this on to also receive the phone number (filled on 150 of 150 live rows) and website that the page data carries but the site does not display. Price with this on: $0.0035 per business plus $0.001 for each row that actually carries such a phone or website ($0.0045 total), shown in the row as undisplayedContactIncluded=true. Rows without one cost only $0.0035.

## `maxResults` (type: `integer`):

Cap on businesses delivered - and charged. Businesses excluded by your filters, profiles that no longer exist and duplicates are never delivered and never charged. 0 = no cap.

## `maxPagesPerCategory` (type: `integer`):

Stop each category after this many listing pages (10 businesses per page). 0 = every page ServiceSeeking has for the category.

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

Off by default: ServiceSeeking runs no anti-bot and every page is served whole over a direct connection. Turn on Apify Proxy (e.g. Residential, Australia) only if your direct requests start failing. Every page is still checked for its closing tag and its own data markers before it is parsed.

## Actor input object example

```json
{
  "categories": [
    "plumbers"
  ],
  "states": [],
  "wholeDirectory": false,
  "profileUrls": [],
  "serviceKeywords": [],
  "requireWebsite": false,
  "requireAbn": false,
  "requireContact": false,
  "minReviews": 0,
  "quotedWithinDays": 0,
  "memberSinceFrom": 0,
  "includeUndisplayedContacts": false,
  "maxResults": 10,
  "maxPagesPerCategory": 0,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `items` (type: `string`):

One row per ServiceSeeking business profile: name, ABN with ATO checksum, website, phone (per the display switch), phones and e-mails from the business's own About text, suburb/state/postcode, coordinates, licences, rating, reviews, times hired, last quoted, member since, badges, awards, services and pricing.

## `runSummary` (type: `string`):

RUN\_SUMMARY: pages crawled per category vs the pager's last page, profiles examined, duplicates skipped, not-found vs unreachable vs filtered, delivered and charged counts, and the measured field fill of the rows you received.

# 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": [
        "plumbers"
    ],
    "maxResults": 10,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapersdelight/serviceseeking-au-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": ["plumbers"],
    "maxResults": 10,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapersdelight/serviceseeking-au-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).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": [
    "plumbers"
  ],
  "maxResults": 10,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call scrapersdelight/serviceseeking-au-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapersdelight/serviceseeking-au-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/58b0E0nh8eIwHRrhX/builds/elcsxiU9w1YOanvIv/openapi.json
