# Xero Advisor Scraper - Accountant & Bookkeeper Leads (`scrapesage/xero-advisor-scraper`) Actor

Scrape the Xero advisor directory: accounting & bookkeeping firms with partner tier, location, industries served, specialties, website, socials and staff. Filter by country, location & tier. Optional email enrichment & monitoring. No login or API key.

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

## Pricing

from $7.00 / 1,000 advisor 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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Xero Advisor Scraper — Accountant & Bookkeeper Leads (Partner Tier, Phone, Website & Specialties)

Extract the **complete Xero advisor directory** — every Xero-certified **accounting & bookkeeping firm** with the fields other tools miss: **Xero partner tier (Platinum / Gold / Silver / Bronze) and partner-since year, office phone, full address with geo, industries served, specialist badges, professional memberships, website, social links and staff**. Optionally turn each firm into a **ready-to-contact B2B lead** by crawling its website for **public emails**.

No login, no cookies, no browser — fast JSON extraction straight from the directory's search index, 99%+ reliable.

### Why this Xero advisor scraper?

Generic "accountant lead" tools just re-skin Google Maps and guess the tech stack. This actor reads the **official Xero advisor directory** and ships the **richest dataset in the category** — including the single most valuable B2B signal: the firm's **Xero partner tier**.

| Data | Google-Maps lead tools | This actor |
|---|---|---|
| Verified Xero-certified firms only | ❌ guesses from tech detection | ✅ the official directory |
| **Xero partner tier** (Platinum…Bronze) | ❌ | ✅ a built-in buying / size signal |
| Partner-since year | ❌ | ✅ |
| Office phone | partial | ✅ from the listing |
| Full address + lat/lng (all offices) | partial | ✅ every office |
| Industries served | ❌ | ✅ full list |
| Specialist badges (migration, payroll, L1/L2 certified) | ❌ | ✅ |
| Professional memberships (AICPA, AIPB, IMA, CA ANZ…) | ❌ | ✅ |
| Website, LinkedIn, Facebook, X/Twitter | partial | ✅ |
| Staff profiles (name, title, photo) | ❌ | ✅ opt-in |
| Public contact emails (from firm website) | ❌ | ✅ opt-in |
| Lead score (0–100) per firm | ❌ | ✅ |

### Use cases

- **B2B lead generation** — accounting & bookkeeping firms are high-intent buyers of fintech, payroll, lending, expense, practice-management and AP/AR tools. Target them by **partner tier** (Platinum/Gold = larger, more sophisticated practices), industries served, and location, then reach them by phone, website and enriched email.
- **App & fintech go-to-market** — build account lists for products that integrate with Xero (the firms here already run a cloud accounting stack and adopt new apps).
- **Recruiting & M&A / roll-ups** — source accounting practices by market, size signal and specialty for talent pipelines or acquisition sourcing.
- **Find an accountant / bookkeeper** — power a "find a Xero advisor near me" directory or referral tool for any city or region.
- **Market intelligence** — map the Xero advisor ecosystem by country, region, tier and specialty; track growth over time.
- **Competitor & channel monitoring** — schedule recurring runs to watch new Xero partners and listing changes in a market.

### 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 **Xero Advisor Scraper**, choose **countries** (US is the default) and optionally **locations**, **partner tiers** or **industries**, then click **Start**.
3. Watch results stream into the dataset table.
4. **Export** as JSON, CSV, Excel, or XML — or pull results programmatically via the [Apify API](https://docs.apify.com/api/v2).

### Input

```json
{
    "countries": ["US"],
    "locations": ["Texas", "California"],
    "partnerTiers": ["PLATINUM", "GOLD"],
    "industries": ["Construction and trades"],
    "searchTerms": ["ecommerce"],
    "maxItems": 100,
    "includeStaff": true,
    "enrichEmails": false,
    "monitorMode": false
}
````

- **countries** *(default `["US"]`)* — ISO country codes. The Xero directory is global; the biggest markets are AU, GB (UK), NZ, US and CA.
- **locations** — optional city or state/region names (`"Austin"`, `"Texas"`, `"London"`). Matched against each firm's city **and** its state/region.
- **partnerTiers** — keep only `PLATINUM`, `GOLD`, `SILVER` or `BRONZE` firms (a strong size / sophistication signal).
- **industries** — keep only firms that serve a given client industry.
- **searchTerms** — optional keywords matched against firm name, description, services and specialties (`"payroll"`, `"CFO"`, `"construction"`).
- **maxItems** *(default 100)* — cap on advisor records for the run.
- **includeStaff** *(default true)* — include the firm's listed staff (name, title, bio, photo).
- **enrichEmails** *(default false)* — visit each firm's website (home + a contact/about page) and extract public emails. Xero routes contact through an on-site form, so this is the way to obtain direct email addresses.
- **monitorMode** *(default false)* — remember firms already returned and emit only **new or changed** firms on later runs. Pairs with [Schedules](https://docs.apify.com/platform/schedules) to track new Xero partners in a market.

### Output

One record per advisor firm (`type: "advisor"`):

```json
{
    "type": "advisor",
    "name": "Accounting Prose",
    "partnerTier": "PLATINUM",
    "partnerSince": "2014",
    "description": "Award-winning bookkeeping & payroll for founders…",
    "website": "http://www.accountingprose.com",
    "phone": "+1 866-477-9708",
    "phones": ["+1 866-477-9708"],
    "email": "hello@accountingprose.com",
    "emails": ["hello@accountingprose.com"],
    "linkedin": "https://www.linkedin.com/company/accounting-prose",
    "facebook": "https://www.facebook.com/accountingprose",
    "twitter": "https://twitter.com/accountingprose",
    "logoUrl": "https://s3.amazonaws.com/xero-…/logo.png",
    "street": "600 South Congress Avenue",
    "city": "Austin",
    "region": "Texas",
    "postalCode": "78704",
    "country": "US",
    "latitude": 30.2561909,
    "longitude": -97.7477464,
    "officeCount": 9,
    "industries": ["Professional services", "Retail trade", "Construction and trades"],
    "specialties": ["Migration specialist", "Payroll specialist", "L2 certified professional"],
    "affiliations": [
        { "name": "American Institute of CPAs", "website": "http://www.aicpa.org" },
        { "name": "American Institute of Professional Bookkeepers", "website": "http://www.aipb.org" }
    ],
    "staff": [{ "name": "Ivy Calgaard", "jobTitle": "Bookkeeper", "photo": "https://profiles.xero.com/image/…" }],
    "staffCount": 16,
    "profileUrl": "https://www.xero.com/us/advisors/profile/de445340-2af8-4a29-a7de-1f75183d9d5f/",
    "leadScore": 100,
    "scrapedAt": "2026-06-24T04:00:00.000Z"
}
```

Multi-office firms also include a `locations` array with the street, city, region, postcode, country, geo, phone and email of **every** office.

### Automate & schedule

Run this actor on autopilot and pull results into your own stack:

- **[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 with **monitorMode** on to capture only newly listed Xero partners and listing changes in a market.
- **[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/xero-advisor-scraper').call({
    countries: ['US'],
    locations: ['California'],
    partnerTiers: ['PLATINUM', 'GOLD'],
    maxItems: 200,
    enrichEmails: true,
});

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

### Integrate with any app

Connect the dataset to 5,000+ apps — no code required:

- **[Make](https://docs.apify.com/platform/integrations/make)** — multi-step automation scenarios.
- **[Zapier](https://docs.apify.com/platform/integrations/zapier)** — push new advisor leads straight into your CRM.
- **[Slack](https://docs.apify.com/platform/integrations/slack)** — get notified when a monitored market gains a new Xero partner.
- **[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 Platinum Xero accounting firms in California and list their phone numbers and websites" and let it run this scraper for you.

### More scrapers from scrapesage

Build a complete **accounting & B2B lead-gen stack**:

- **[TaxBuzz Scraper](https://apify.com/scrapesage/taxbuzz-scraper)** — tax preparers, CPAs & accountant leads from TaxBuzz.
- **[US Business Formation Scraper](https://apify.com/scrapesage/us-business-formation-scraper)** — brand-new LLCs & companies (fresh clients for accounting firms).
- **[Insurance Agent Scraper](https://apify.com/scrapesage/insurance-agent-scraper)** — State Farm & Farmers agent leads.
- **[Google Maps Email Extractor](https://apify.com/scrapesage/google-maps-with-contact-details)** — any local business with emails & phones.
- **[LinkedIn Jobs Scraper](https://apify.com/scrapesage/linkedin-jobs-scraper)** — job postings as hiring-intent signals.
- **[GitHub Scraper](https://apify.com/scrapesage/github-scraper)** — repos, developers & contact leads.
- **[Made-in-China Scraper](https://apify.com/scrapesage/made-in-china-scraper)** — suppliers, products & B2B leads.

### Tips

- **Big markets**: Australia (~5,900), the UK (~4,800) and New Zealand (~1,500) have far more Xero advisors than the US (~600). For very large markets, narrow with **locations**, **partnerTiers** or **industries** to slice the directory (deep pagination is guarded at 5,000 results per query).
- **Best leads first**: filter `partnerTiers` to `PLATINUM`/`GOLD` for the largest, most established practices; sort the dataset by `leadScore`.
- **Emails**: turn on **enrichEmails** to recover direct emails from firm websites — every firm has a website, so coverage is good even though Xero hides email on the listing.
- **Proxies**: the default Apify Proxy (automatic) works — the directory's search API is served cleanly over datacenter IPs.
- **Monitoring**: combine [Schedules](https://docs.apify.com/platform/schedules) with **monitorMode** to capture only new or updated firms each run.

### FAQ

**What is a Xero advisor?** A Xero-certified accounting or bookkeeping firm listed in [Xero's public advisor directory](https://www.xero.com/us/advisors/). Each listing includes the firm's Xero **partner tier**, location, industries served, specialties and links — exactly what this actor extracts.

**How do I scrape Xero advisors for a specific city or state?** Put the place in `locations` (`"Austin"`, `"Texas"`, `"London"`) and pick the matching `countries`. Combine with `partnerTiers` or `industries` to narrow further.

**Does it work without a Xero login or API key?** Yes. The actor reads the directory's public search index directly — no login, no API key, no browser.

**Where do the emails come from?** Never from a private source. Xero routes contact through an on-site form, so with `enrichEmails` on, the actor visits each firm's own public website and extracts publicly listed contact emails — the same thing a human visitor would see.

**Can I export to Google Sheets, CSV, or Excel?** Yes — one click in the dataset view, or automatically on every run via the [Google Drive integration](https://docs.apify.com/platform/integrations/drive).

**How do I monitor new Xero partners automatically?** Turn on `monitorMode` and create a [Schedule](https://docs.apify.com/platform/schedules); each run emits only new or changed firms. Add a [webhook](https://docs.apify.com/platform/integrations/webhooks) or [Zapier zap](https://docs.apify.com/platform/integrations/zapier) to push them into your CRM.

**A field is null — why?** Some firms are online-only (no street/geo), don't publish a phone or email, or skip socials, specialties or staff. Fields are `null` only when the firm didn't provide them, not because the scraper skipped them — it already reads the richest data the directory exposes (including phone, email and geo nested in each office record).

**Is scraping Xero's advisor directory legal?** This actor collects publicly available business directory data only. You are responsible for using the data in compliance with applicable laws (e.g. GDPR/CCPA for any personal data) and Xero'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

## `countries` (type: `array`):

Countries to pull Xero-certified accountants & bookkeepers from (ISO codes). US is the default. The Xero advisor directory is global — biggest in AU, GB (UK), NZ, US and CA. Leave a single country for a fast, focused run.

## `locations` (type: `array`):

Optional city or state/region filters within the selected countries — e.g. "Texas", "Austin", "California", "New York", "London". Matched against each firm's city and its state/region. Leave empty for the whole country.

## `searchTerms` (type: `array`):

Optional keywords to match firm name, description, services or specialties — e.g. "ecommerce", "construction", "payroll", "CFO". One per row. Leave empty to list every advisor.

## `partnerTiers` (type: `array`):

Keep only firms at these Xero partner-program tiers (a strong buying / size signal). Leave empty for all tiers.

## `industries` (type: `array`):

Keep only firms that list one of these client industries. Leave empty for all.

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

Cap on advisor records across the whole run.

## `includeStaff` (type: `boolean`):

Include the firm's listed staff members (name, job title, bio, photo) when present on the listing.

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

Opt-in: visit each firm's website (home + a contact/about page) to extract public email addresses. Adds one or two requests per firm. Xero does not publish phone or email on the listing, so this is the way to obtain direct contact details.

## `maxEmailPagesPerSite` (type: `integer`):

How many pages of each firm's website to scan for emails when enrichment is on (home page plus likely contact/about pages).

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

Remember which advisor firms were already returned and emit ONLY firms not seen (or changed) since previous runs. Pairs with Apify Schedules to track new Xero partners and listing changes in a market over time.

## `monitorStoreName` (type: `string`):

Named key-value store that holds the 'already seen' advisor ids for monitoring mode. Use a different name per tracked market to keep histories separate.

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

Proxy settings. The Xero advisor directory and its search API are served cleanly over datacenter IPs, so Apify Proxy (automatic) is the default. Blocked requests retry automatically on a fresh IP.

## Actor input object example

```json
{
  "countries": [
    "US"
  ],
  "partnerTiers": [],
  "industries": [],
  "maxItems": 100,
  "includeStaff": true,
  "enrichEmails": false,
  "maxEmailPagesPerSite": 3,
  "monitorMode": false,
  "monitorStoreName": "xero-advisor-monitor",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

All scraped advisor records in the default dataset — firm name, Xero partner tier & year, address & geo, industries, specialties, website, social links, staff and a 0–100 lead score.

# 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 = {
    "countries": [
        "US"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapesage/xero-advisor-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 = { "countries": ["US"] }

# Run the Actor and wait for it to finish
run = client.actor("scrapesage/xero-advisor-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 '{
  "countries": [
    "US"
  ]
}' |
apify call scrapesage/xero-advisor-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Xero Advisor Scraper - Accountant & Bookkeeper Leads",
        "description": "Scrape the Xero advisor directory: accounting & bookkeeping firms with partner tier, location, industries served, specialties, website, socials and staff. Filter by country, location & tier. Optional email enrichment & monitoring. No login or API key.",
        "version": "0.1",
        "x-build-id": "TECfvTcJ1TIKGEEpM"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapesage~xero-advisor-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapesage-xero-advisor-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/scrapesage~xero-advisor-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scrapesage-xero-advisor-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/scrapesage~xero-advisor-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scrapesage-xero-advisor-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "countries": {
                        "title": "Countries",
                        "type": "array",
                        "description": "Countries to pull Xero-certified accountants & bookkeepers from (ISO codes). US is the default. The Xero advisor directory is global — biggest in AU, GB (UK), NZ, US and CA. Leave a single country for a fast, focused run.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "US",
                                "GB",
                                "AU",
                                "NZ",
                                "CA",
                                "IE",
                                "ZA",
                                "SG",
                                "HK",
                                "AE",
                                "MY",
                                "IN",
                                "PH",
                                "ID",
                                "MT",
                                "TH",
                                "LK",
                                "PK",
                                "NL",
                                "JE",
                                "FJ",
                                "KW",
                                "NA",
                                "GH",
                                "CN"
                            ],
                            "enumTitles": [
                                "United States",
                                "United Kingdom",
                                "Australia",
                                "New Zealand",
                                "Canada",
                                "Ireland",
                                "South Africa",
                                "Singapore",
                                "Hong Kong",
                                "United Arab Emirates",
                                "Malaysia",
                                "India",
                                "Philippines",
                                "Indonesia",
                                "Malta",
                                "Thailand",
                                "Sri Lanka",
                                "Pakistan",
                                "Netherlands",
                                "Jersey",
                                "Fiji",
                                "Kuwait",
                                "Namibia",
                                "Ghana",
                                "China"
                            ]
                        },
                        "default": [
                            "US"
                        ]
                    },
                    "locations": {
                        "title": "Locations (optional)",
                        "type": "array",
                        "description": "Optional city or state/region filters within the selected countries — e.g. \"Texas\", \"Austin\", \"California\", \"New York\", \"London\". Matched against each firm's city and its state/region. Leave empty for the whole country.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchTerms": {
                        "title": "Search terms (optional)",
                        "type": "array",
                        "description": "Optional keywords to match firm name, description, services or specialties — e.g. \"ecommerce\", \"construction\", \"payroll\", \"CFO\". One per row. Leave empty to list every advisor.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "partnerTiers": {
                        "title": "Xero partner tiers",
                        "type": "array",
                        "description": "Keep only firms at these Xero partner-program tiers (a strong buying / size signal). Leave empty for all tiers.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "PLATINUM",
                                "GOLD",
                                "SILVER",
                                "BRONZE"
                            ],
                            "enumTitles": [
                                "Platinum",
                                "Gold",
                                "Silver",
                                "Bronze"
                            ]
                        },
                        "default": []
                    },
                    "industries": {
                        "title": "Industries served (optional)",
                        "type": "array",
                        "description": "Keep only firms that list one of these client industries. Leave empty for all.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "Accommodation and hospitality",
                                "Administration and support services",
                                "Agriculture",
                                "Arts and recreation",
                                "Construction and trades",
                                "Education",
                                "Finance and insurance",
                                "Healthcare and social services",
                                "Information media and telecommunications",
                                "Manufacturing",
                                "Marketing",
                                "Mining",
                                "Not for profit",
                                "Professional services",
                                "Real estate",
                                "Retail trade",
                                "Transport and storage",
                                "Utilities",
                                "Wholesale trade"
                            ]
                        },
                        "default": []
                    },
                    "maxItems": {
                        "title": "Max results (advisors)",
                        "minimum": 1,
                        "maximum": 50000,
                        "type": "integer",
                        "description": "Cap on advisor records across the whole run.",
                        "default": 100
                    },
                    "includeStaff": {
                        "title": "Include staff profiles",
                        "type": "boolean",
                        "description": "Include the firm's listed staff members (name, job title, bio, photo) when present on the listing.",
                        "default": true
                    },
                    "enrichEmails": {
                        "title": "Enrich emails from firm website",
                        "type": "boolean",
                        "description": "Opt-in: visit each firm's website (home + a contact/about page) to extract public email addresses. Adds one or two requests per firm. Xero does not publish phone or email on the listing, so this is the way to obtain direct contact details.",
                        "default": false
                    },
                    "maxEmailPagesPerSite": {
                        "title": "Max website pages per firm (email enrichment)",
                        "minimum": 1,
                        "maximum": 6,
                        "type": "integer",
                        "description": "How many pages of each firm's website to scan for emails when enrichment is on (home page plus likely contact/about pages).",
                        "default": 3
                    },
                    "monitorMode": {
                        "title": "Monitoring mode — only new advisors",
                        "type": "boolean",
                        "description": "Remember which advisor firms were already returned and emit ONLY firms not seen (or changed) since previous runs. Pairs with Apify Schedules to track new Xero partners and listing changes in a market over time.",
                        "default": false
                    },
                    "monitorStoreName": {
                        "title": "Monitor store name",
                        "type": "string",
                        "description": "Named key-value store that holds the 'already seen' advisor ids for monitoring mode. Use a different name per tracked market to keep histories separate.",
                        "default": "xero-advisor-monitor"
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy settings. The Xero advisor directory and its search API are served cleanly over datacenter IPs, so Apify Proxy (automatic) is the default. Blocked requests retry automatically on a fresh IP.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
