# Alignable Business Scraper (`maximedupre/alignable`) Actor

Find public Alignable business listings by location, industry, or public directory and business-profile links. Get business names, locations, owner or representative names, contact details, websites, and source URLs when shown.

- **URL**: https://apify.com/maximedupre/alignable.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Lead generation, Business, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.90 / 1,000 business listings

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?

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

### 🧭 Find Alignable business listings by place

Sales teams, local researchers, and marketers can search public Alignable listings by location or open public Alignable links. The Actor returns business names, locations, owner or representative details, contact data, websites, and source links when the public source shows them. Use the rows to build local business lists from public source pages.

**Use cases**

- Use **[Alignable Business Profiles](https://apify.com/maximedupre/alignable/examples/alignable-business-profiles)** to find public records for a local area.
- Run **[Alignable Business Search](https://apify.com/maximedupre/alignable/examples/alignable-business-search)** for a place and collect matching records.
- Use **[Alignable Directory Search](https://apify.com/maximedupre/alignable/examples/alignable-directory-search)** to check a local area.
- Build a source-backed list with **[Alignable Business Listings](https://apify.com/maximedupre/alignable/examples/alignable-business-listings)**.
- Review local source data with **[Alignable Business Directory](https://apify.com/maximedupre/alignable/examples/alignable-business-directory)**.

#### 🧾 Alignable business records

Each saved row is the first eligible occurrence of one public Alignable business. It keeps the location or Alignable URL that first led to the row, the capture time, and public business details when the source shows them. Later matches for the same source business in the same run are ignored.

#### ▶️ Search a place or open an Alignable link

1. Choose **Search by location** and enter one or more cities, regions, or other location scopes.
2. Add one optional industry or category. The same value is used for every location in that search.
3. Or choose **Open Alignable links** and add public Alignable directory or business-profile URLs.
4. Turn on **Enrich business profiles** when you want extra public profile details beyond listing information.
5. Set **Maximum records** if you want a cap, then start the run and open the dataset.

#### ⚙️ Input

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `target` | string | Required target. Choose `locationSearch` to search places or `alignableLinks` to start from public Alignable URLs. |
| `locations` | array of strings | One or more cities, regions, or other location scopes for a location search. |
| `locations[]` | string | One location value, such as `New York, NY`. |
| `industry` | string | One optional business industry or category used for every submitted location. |
| `alignableLinks` | array of objects | One or more public Alignable directory or business-profile URLs for a link run. |
| `alignableLinks[].url` | URL | One public Alignable directory or business-profile URL. |
| `includeProfileDetails` | boolean | When true, collect extra public details from each business profile when available. |
| `maxItems` | integer | Optional record limit. If you leave it empty, the Actor returns all available results until the source is exhausted. |

**Successful input example**

This example is copied from a successful current-beta default-input run.

```json
{
  "target": "locationSearch",
  "locations": [
    "New York, NY"
  ],
  "includeProfileDetails": false,
  "maxItems": 100
}
```

#### 🧾 Output

Every row includes `businessName`, `profileUrl`, `discoveredFrom`, and `capturedAt`. Other fields are included when public Alignable data is available.

**Run output**

| Field | Type | What it does |
| --- | --- | --- |
| `dataset` | URL | Link to the public Alignable business listings dataset for the run. |

**Business listing row**

| Field | Type | What it does |
| --- | --- | --- |
| `businessName` | string | Public business name. |
| `businessId` | string | Public Alignable business ID when the source shows it. |
| `profileUrl` | URL | Canonical public Alignable listing or business-profile URL. |
| `discoveredFrom` | string | Submitted location or Alignable URL that first led to this row. |
| `capturedAt` | date-time | Time when the public record was captured. |
| `category` | string | Public business industry or category when shown. |
| `description` | string | Public business description when shown. |
| `location` | object | Public city, state, region, or country linked to the business. |
| `location.city` | string | Public business city. |
| `location.state` | string | Public state or province. |
| `location.region` | string | Public region linked to the business. |
| `location.country` | string | Public business country. |
| `owner` | object | Named public owner or primary representative when shown. |
| `owner.name` | string | Public owner or representative name. |
| `owner.role` | string | Public role of the owner or representative when shown. |
| `websites` | array of URLs | Public business website URLs shown by the source. |
| `contact` | object | Public business contact details shown by the source. |
| `contact.email` | email | Public business email address when shown. |
| `contact.phone` | string | Public business phone number in normalized form. |
| `address` | object | Public business address when shown. |
| `address.formatted` | string | Public address in a readable form. |
| `address.street` | string | Public street address. |
| `address.city` | string | City in the public business address. |
| `address.state` | string | State or province in the public business address. |
| `address.postalCode` | string | Postal code in the public business address. |
| `address.country` | string | Country in the public business address. |
| `services` | array of strings | Public business services listed by the source. |
| `recommendationCount` | integer | Public Alignable recommendation count. |
| `rating` | number | Public business rating when shown. |
| `connectionCount` | integer | Public Alignable connection count when shown. |
| `yearsInBusiness` | integer | Public number of years the business has operated when shown. |
| `profileImageUrl` | URL | Public business logo or profile image URL when shown. |
| `socialLinks` | array of objects | Public social-profile links associated with the business. |
| `socialLinks[].platform` | string | Social platform name. |
| `socialLinks[].url` | URL | Public social-profile URL. |

**Example business row**

This is one complete row from a successful current-beta run. Optional fields that the source did not show are absent.

```json
{
  "businessName": "Fisher Enterprises LLC",
  "profileUrl": "https://www.alignable.com/new-york-ny/fisher-enterprises-llc",
  "discoveredFrom": "New York, NY",
  "capturedAt": "2026-08-22T13:52:06.073Z",
  "category": "Loan Consulting",
  "location": {
    "city": "New York",
    "state": "NY"
  },
  "owner": {
    "name": "David Franklin"
  },
  "businessId": "174394",
  "description": "We are a 30 year old financial services company that helps companies that cannot get conventional bank financing for start-ups, troubled companies, acquisitions and restructuring of debt with or WITHOUT real estate both domestically as well as internationally. We can help with start-up projects and acquisitions where the borrower has less than 5% cash to contribute.",
  "profileImageUrl": "https://pictures.alignable.com/eyJidWNrZXQiOiJhbGlnbmFibGV3ZWItcHJvZHVjdGlvbiIsImtleSI6ImJ1c2luZXNzZXMvbG9nb3Mvb3JpZ2luYWwvMTc0Mzk0L0RhdmlkIEZyYW5rbGluLmpwZyIsImVkaXRzIjp7ImV4dHJhY3QiOnsibGVmdCI6MCwidG9wIjowLCJ3aWR0aCI6MTUzNiwiaGVpZ2h0IjoxNTM2fSwicmVzaXplIjp7IndpZHRoIjoxODIsImhlaWdodCI6MTgyfSwiZXh0ZW5kIjp7InRvcCI6MCwiYm90dG9tIjowLCJsZWZ0IjowLCJyaWdodCI6MCwiYmFja2dyb3VuZCI6eyJyIjoyNTUsImciOjI1NSwiYiI6MjU1LCJhbHBoYSI6MX19fX0=",
  "recommendationCount": 385,
  "websites": [
    "https://www.FisherEnterprisesLLC.com"
  ],
  "contact": {
    "phone": "+12122231044"
  },
  "address": {
    "street": "322 Central Park W PHC",
    "city": "New York",
    "state": "NY",
    "postalCode": "10025"
  },
  "services": [
    "Any Kind of Hard to Arrange Money"
  ],
  "yearsInBusiness": 30
}
```

#### 💳 Pricing

This Actor uses pay-per-event pricing. The `Business listing` event is charged once for each public business listing saved to your dataset during a run. The current price is shown in the Store pricing panel.

#### 🔌 Integrations

Review the rows in the default Apify dataset, export them in an available format, or retrieve them through the Apify API for your workflow.

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### Can I search more than one location?

Yes. Add one or more locations to one location search. The same industry value is used for every location in that run.

##### Can I start with an Alignable directory or business-profile URL?

Yes. Choose **Open Alignable links** and add public Alignable URLs. Private or login-gated pages are not included.

##### What does Enrich business profiles do?

It collects extra public details from each business profile when available, beyond the listing information.

##### What happens if I leave Maximum records empty?

The Actor returns all available results until the source is exhausted.

##### Why is a field missing from a row?

Alignable may not show every public field. The Actor leaves unavailable values out instead of guessing.

##### Does the Actor search the wider web?

No. It is for public Alignable listings and profiles, not general web search or other directories.

##### Are duplicate businesses saved more than once?

The Actor saves the first eligible occurrence of a source business. If it appears again through another submitted location or URL in the same run, later matches are ignored.

##### Is this the official Alignable website?

No. This Actor reads public Alignable pages for dataset use. Visit Alignable's own website for account or service questions.

### 📝 Changelog

**0.0: Initial release**

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~alignable/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [Google Maps List Scraper: 30+ Fields Per Place](https://apify.com/maximedupre/google-maps-shared-list-scraper) can collect nearby places and their public business details from shared Google Maps lists.
- [Yellow Pages Scraper](https://apify.com/maximedupre/yellowpages-scraper) can collect US business listings by keyword and location for comparison or lead research.
- [Google Maps Phone Number Scraper](https://apify.com/maximedupre/google-maps-phone-number-scraper) can build phone-focused local business lists from public Google Maps listings.
- [Bark Scraper](https://apify.com/maximedupre/bark-scraper) can find public service providers by category and location in the United Kingdom and Ireland.
- [Website Emails Scraper](https://apify.com/maximedupre/website-emails-scraper) can find public email addresses on business websites already found in your research.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `target` (type: `string`):

Choose where to find public Alignable business listings.

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

Enter one or more cities, regions, or other location scopes. The same industry value is used for every location.

## `industry` (type: `string`):

Optionally enter one business industry or category for the location search.

## `alignableLinks` (type: `array`):

Add one or more public Alignable directory or business-profile URLs to use as starting points.

## `includeProfileDetails` (type: `boolean`):

For either target, collect extra public details from each business profile when available, beyond the listing information.

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

Optionally stop after this many business records. If you leave it empty, the Actor returns all available results until the source is exhausted.

## Actor input object example

```json
{
  "target": "locationSearch",
  "locations": [
    "New York, NY"
  ],
  "includeProfileDetails": false,
  "maxItems": 100
}
```

# Actor output Schema

## `dataset` (type: `string`):

A link to the public Alignable business listings found by the Actor.

# 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 = {
    "target": "locationSearch",
    "locations": [
        "New York, NY"
    ],
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/alignable").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 = {
    "target": "locationSearch",
    "locations": ["New York, NY"],
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/alignable").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 '{
  "target": "locationSearch",
  "locations": [
    "New York, NY"
  ],
  "maxItems": 100
}' |
apify call maximedupre/alignable --silent --output-dataset

```

## MCP server setup

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

```

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/2yThAweMXB5UwFbAB/builds/Pc6GWRwGSiJkiMAsc/openapi.json
