# Escort Alligator / ListCrawler Scraper (`hypebridge/escortalligator-listcrawler`) Actor

Collect public Escort Alligator listing cards from city result pages, with optional detail-page enrichment for contact, identity, location, attributes, and full-size gallery URLs.

- **URL**: https://apify.com/hypebridge/escortalligator-listcrawler.md
- **Developed by:** [Hypebridge](https://apify.com/hypebridge) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.05 / basic event

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

### What does Escort Alligator / ListCrawler Scraper do?

**Escort Alligator / ListCrawler Scraper** extracts public listing cards and listing-detail profiles from [Escort Alligator](https://escortalligator.com.listcrawler.eu) without requiring an official API. Start from one or more supported city pages to collect listings in bulk, or provide an individual listing URL to retrieve its full public profile.

The Actor saves results incrementally to an Apify Dataset, removes duplicate listing IDs across all start URLs, follows numbered result pages within your limits, and can optionally enrich city results with public contact, location, identity, attribute, and gallery data. It does not sign in, submit forms, contact advertisers, or access private account data.

### Table of contents

- [Why scrape Escort Alligator?](#why-scrape-escort-alligator)
- [Features](#features)
- [What data can the Actor extract?](#what-data-can-the-actor-extract)
- [How to scrape Escort Alligator](#how-to-scrape-escort-alligator)
- [Supported Escort Alligator URLs](#supported-escort-alligator-urls)
- [Input](#input)
- [Output](#output)
- [How much does it cost?](#how-much-does-it-cost)
- [Tips and limitations](#tips-and-limitations)
- [FAQ](#faq)

### Why scrape Escort Alligator?

- **Public directory monitoring**: Track which listings are currently visible in selected cities.
- **Market and geographic research**: Compare public listing volume, posting signals, and profile attributes across supported locations.
- **Listing management**: Review public listing presentation, contact details, images, and metadata in a structured format.
- **Data pipelines**: Export normalized records to JSON, CSV, Excel, or HTML for approved analytics and internal workflows.

Only collect and use data when you have a lawful, legitimate purpose. Results can contain personal and sensitive information that requires careful handling.

### Features

| Feature | What it does |
| --- | --- |
| City listing collection | Extracts all available cards from supported city result pages within your item and page limits. |
| Optional detail enrichment | Adds phone, identity, location, attributes, posting metadata, and full-size gallery URLs. |
| Direct detail URLs | Returns a detailed record even when `getListingDetails` is turned off. |
| Pagination | Continues through numbered pages until `maxItems`, `maxPages`, or the final page is reached. |
| Global deduplication | Emits each numeric listing ID at most once across all supplied URLs and pages. |
| Stable output | Basic and detailed rows share the same 29-field shape, with unavailable fields represented consistently. |
| Incremental delivery | Writes each completed record directly to the Dataset instead of waiting for the entire run. |
| Bounded diagnostics | Optional debug mode saves a limited number of failed-page artifacts for troubleshooting. |

### What data can the Actor extract?

| Field | Type | Description |
| --- | --- | --- |
| `recordType` | String | `basic` for a city-page card or `detail` for an enriched/direct profile. |
| `id` | String | Numeric listing ID and deduplication key. |
| `url` | String | Normalized listing-detail URL. |
| `canonicalPageUrl` | String or null | Canonical city page that discovered the listing; null for a direct detail start. |
| `country` | String or null | Country from the public URL. |
| `state` | String or null | State or region from the public URL. |
| `city` | String or null | City from the public URL or profile. |
| `cityId` | String or null | Site city identifier when published on a detail page. |
| `page` | Number or null | City result page that discovered the listing. |
| `title` | String | Public listing title. |
| `age` | Number or null | Published age when it is valid and internally consistent. |
| `description` | String or null | Public card summary or detail-page description. |
| `locationText` | String or null | Raw public location text from a city listing card. |
| `location` | String or null | Public location attribute from the detail page. |
| `imageUrl` | String or null | City-card thumbnail URL. |
| `imageAlt` | String or null | Published alternative text for the thumbnail. |
| `images` | Array | Up to 100 unique full-size gallery image URLs and their alternative text. |
| `postedDateLabel` | String or null | Raw date heading associated with a city listing card. |
| `postedTimeLabel` | String or null | Raw posting-time label from a city listing card. |
| `postedAtLabel` | String or null | Raw posting label from a detail page. |
| `hasVideo` | Boolean or null | Whether the city card publishes a video marker. |
| `isFeatured` | Boolean or null | Whether the most authoritative available page marks the listing as featured. |
| `phone` | String or null | Public detail-page phone value in normalized form. |
| `phoneDisplay` | String or null | Phone number formatted as displayed by the source. |
| `phoneVerified` | Boolean or null | Whether the source explicitly marks the public phone as verified. |
| `identity` | String or null | Public identity value from the detail page. |
| `seeking` | String or null | Public preference value from the detail page. |
| `attributes` | Object | Up to 50 public detail attributes as normalized label/value pairs. |
| `metaDescription` | String or null | Public page metadata description. |

### How to scrape Escort Alligator

1. [Create an Apify account](https://apify.com) if you do not already have one.
2. Open **Escort Alligator / ListCrawler Scraper** and click **Try for free**.
3. Add up to 20 supported city or individual listing URLs.
4. Set **Max listings** and **Max pages per city URL** to control the run size.
5. Turn on **Get listing details** when you need contact, profile, attribute, and gallery fields for city-page results.
6. Click **Start** and download the completed Dataset as JSON, CSV, Excel, or HTML.

### Supported Escort Alligator URLs

The Actor accepts HTTPS URLs on `escortalligator.com.listcrawler.eu` in these forms:

- City page with state: `https://escortalligator.com.listcrawler.eu/brief/escorts/{country}/{state}/{city}/{page}`
- Legacy city page: `https://escortalligator.com.listcrawler.eu/brief/escorts/{country}/{city}/{page}`
- Listing detail: `https://escortalligator.com.listcrawler.eu/post/escorts/{country}/{state}/{city}/{listingId}`

URL fragments are removed. Unsupported hosts, query parameters, and unrelated paths are rejected before collection starts. Equivalent legacy and canonical city URLs are collapsed so the same city page is not processed twice.

### Input

See the **Input** tab for the interactive form and validation rules.

| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| `startUrls` | Array | Required | One to 20 supported city-listing or listing-detail URLs. |
| `maxItems` | Integer | `150` | Maximum unique output rows across all starts; allowed range 1–5,000. |
| `getListingDetails` | Boolean | `false` | Enrich listings discovered on city pages. Direct detail starts are always fully extracted. |
| `maxPages` | Integer | `3` | Maximum numbered pages followed from each city start; allowed range 1–100. |
| `debugMode` | Boolean | `false` | Save up to 10 bounded failed-page artifacts. These may contain public listing content. |

#### Example input: collect city listing cards

```json
{
  "startUrls": [
    { "url": "https://escortalligator.com.listcrawler.eu/brief/escorts/usa/texas/austin/1" }
  ],
  "maxItems": 50,
  "getListingDetails": false,
  "maxPages": 2,
  "debugMode": false
}
```

#### Example input: enrich city listings

```json
{
  "startUrls": [
    { "url": "https://escortalligator.com.listcrawler.eu/brief/escorts/usa/texas/austin/1" }
  ],
  "maxItems": 10,
  "getListingDetails": true,
  "maxPages": 1,
  "debugMode": false
}
```

#### Example input: collect one listing profile

Replace the sample listing ID with a current supported detail URL. Direct detail URLs are enriched regardless of the global detail toggle.

```json
{
  "startUrls": [
    { "url": "https://escortalligator.com.listcrawler.eu/post/escorts/usa/texas/austin/213000000" }
  ],
  "maxItems": 1,
  "getListingDetails": false,
  "maxPages": 1,
  "debugMode": false
}
```

### Output

Results are saved to the run's **Dataset** tab and can be downloaded as JSON, CSV, Excel, or HTML. Every item contains the same fields. A basic row leaves detail-only fields null or empty; a detail row fills them when the source publishes the information.

#### Sample output

The following record is anonymized and demonstrates the complete data structure:

```json
{
  "recordType": "detail",
  "id": "213000000",
  "url": "https://escortalligator.com.listcrawler.eu/post/escorts/usa/texas/austin/213000000",
  "canonicalPageUrl": "https://escortalligator.com.listcrawler.eu/brief/escorts/usa/texas/austin/1",
  "country": "usa",
  "state": "texas",
  "city": "austin",
  "cityId": "16",
  "page": 1,
  "title": "Example listing title",
  "age": 26,
  "description": "Example public listing description.",
  "locationText": "Example area",
  "location": "Example neighborhood",
  "imageUrl": "https://images.example.com/example-thumb.jpg",
  "imageAlt": "Example listing image",
  "images": [
    { "url": "https://images.example.com/example-full.jpg", "alt": "Example gallery image" }
  ],
  "postedDateLabel": "Wed. Sep. 2",
  "postedTimeLabel": "Posted: 3:24 PM",
  "postedAtLabel": "Wed 02 Sep 2026 15:46 PM",
  "hasVideo": false,
  "isFeatured": false,
  "phone": "5125550100",
  "phoneDisplay": "512-555-0100",
  "phoneVerified": true,
  "identity": "Published identity",
  "seeking": "Published preference",
  "attributes": {
    "age": "26",
    "location": "Example neighborhood"
  },
  "metaDescription": "Example public profile description."
}
```

Posting values are intentionally preserved as source labels because the source may omit a year or timezone and may publish unconventional time formatting. The Actor does not guess missing dates or profile values.

### How much does it cost?

Apify shows the pricing and spending limit that apply before you start a run. If no per-result price is displayed, the run uses the standard platform usage included with your Apify plan.

When pay-per-result pricing is active, each persisted row belongs to exactly one result tier:

| Result tier | Includes |
| --- | --- |
| Basic listing | A city-page card without detail enrichment. |
| Detailed listing | A city-discovered listing enriched from its profile, or a direct detail URL. |

Listing-only collection is the economical choice for bulk discovery. Detail enrichment processes an additional profile page for each selected result, so it takes longer and can consume more platform usage. Set `maxItems` and `maxPages` before a large run to keep the scope predictable.

### Tips and limitations

- Start with a small `maxItems` value to confirm that the selected city and fields meet your needs.
- Leave `getListingDetails` off for fast bulk discovery; enable it only when you need detail-only fields.
- Supplying a direct detail URL always requests the complete public profile.
- Optional values remain null or empty when the source does not publish them. The Actor does not infer data from surrounding prose.
- Gallery entries contain image URLs and alternative text; the Actor does not download or rehost image files.
- Public listings can be edited or removed at any time, so repeated runs may return different results.
- Source availability and anti-automation measures can occasionally prevent a page from loading. Transient failures are retried, and individual final failures are reported in the run log.
- The Actor does not extract prices, rates, email addresses, social links, reviews, comments, or private account data.

### FAQ

#### Is scraping Escort Alligator legal?

The Actor only accesses content that is publicly visible without signing in. Whether you may collect or use that content depends on your jurisdiction, purpose, the website's terms, and applicable privacy or data-protection law. Do not use the Actor for harassment, discrimination, unsolicited contact, profiling, or any unlawful purpose. Consult a qualified lawyer if you are unsure.

#### Why are some fields null on basic records?

City cards publish fewer fields than individual listing pages. Basic rows intentionally leave `cityId`, `location`, `postedAtLabel`, `phone`, `phoneDisplay`, `phoneVerified`, `identity`, `seeking`, and `metaDescription` null, while `images` and `attributes` are empty containers. `locationText` can also be null when a particular card does not publish an area. Enable `getListingDetails`, or use a direct listing URL, when detail-only fields are needed; they can still be null when the public profile itself omits them.

#### Will equivalent city URLs create duplicates?

No. The Actor normalizes equivalent legacy and canonical city routes and deduplicates final rows by numeric listing ID across all inputs and pages.

#### Can I run the Actor through an API or automation?

Yes. Open the Actor's **API** tab for ready-to-use examples for the Apify API and supported client libraries. Dataset results can also be connected to other automation tools.

### Support

- Report bugs or request features in the Actor's **Issues** tab.
- Find programmatic examples in the **API** tab.
- Include the run ID and the affected input URL when reporting a reproducible collection problem. Do not paste private credentials into an issue.

> **Privacy disclaimer**: This Actor extracts only content that the source publishes publicly, but results can include personal data such as phone numbers, identity or preference labels, location information, descriptions, and images. Personal data may be protected by the GDPR, CCPA, and other laws. Collect, store, share, and retain it only when you have a legitimate legal basis and appropriate safeguards. If you are unsure, consult a qualified lawyer before running the Actor.

# Actor input Schema

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

Escort Alligator city listing or individual listing-detail URLs. Only escortalligator.com.listcrawler.eu URLs are accepted.

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

Maximum number of unique final listing records across all start URLs.

## `getListingDetails` (type: `boolean`):

Visit each listing page for phone, identity, location, attributes, and full-size gallery URLs. Direct detail URLs are always fully extracted.

## `maxPages` (type: `integer`):

Safety cap for numbered pagination from each city start URL. Crawling also stops when max listings is reached.

## `debugMode` (type: `boolean`):

Save up to 10 capped failed-response artifacts to the default key-value store. Artifacts may contain public listing content.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://escortalligator.com.listcrawler.eu/brief/escorts/usa/texas/austin/1"
    }
  ],
  "maxItems": 500,
  "getListingDetails": false,
  "maxPages": 3,
  "debugMode": false
}
```

# Actor output Schema

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

Complete dataset containing every stable output field.

## `overview` (type: `string`):

Table view focused on identity, location, contact, and posting fields.

## `files` (type: `string`):

Bounded failed-response artifacts created only when debug mode is enabled.

# 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 = {
    "startUrls": [
        {
            "url": "https://escortalligator.com.listcrawler.eu/brief/escorts/usa/texas/austin/1"
        }
    ],
    "maxItems": 500,
    "maxPages": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("hypebridge/escortalligator-listcrawler").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 = {
    "startUrls": [{ "url": "https://escortalligator.com.listcrawler.eu/brief/escorts/usa/texas/austin/1" }],
    "maxItems": 500,
    "maxPages": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("hypebridge/escortalligator-listcrawler").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 '{
  "startUrls": [
    {
      "url": "https://escortalligator.com.listcrawler.eu/brief/escorts/usa/texas/austin/1"
    }
  ],
  "maxItems": 500,
  "maxPages": 3
}' |
apify call hypebridge/escortalligator-listcrawler --silent --output-dataset

```

## MCP server setup

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

```

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/cYqlsDgeqdqNbeUvJ/builds/SeieF9tyAM1xeR5H7/openapi.json
