# Justia Lawyer Directory Scraper - Attorney Data & Leads (`memo23/justia-lawyer-directory-scraper`) Actor

Scrape lawyers from the Justia Lawyer Directory by location and practice area, or from listing / profile URLs. One row per attorney: name, phone, firm, address, practice areas, years of experience, education, bar memberships, website and social links. Optional full-profile enrichment. JSON/CSV out.

- **URL**: https://apify.com/memo23/justia-lawyer-directory-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Lead generation, Agents, AI
- **Stats:** 2 total users, 1 monthly users, 80.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per 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/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

## Justia Lawyer Directory Scraper

Turn any [Justia Lawyer Directory](https://www.justia.com/lawyers) page into clean, structured attorney data. Scrape by **location** and **practice area**, or paste **listing URLs** and **lawyer profile URLs** — and get one flat row per attorney with name, phone, law firm, address, practice areas, years of experience, education, bar memberships, website and social links.

Built for legal lead generation, competitive intelligence for law firms, legal-tech datasets, and directory research across every US state, city and practice area.

#### How it works

![How the Justia Lawyer Directory Scraper works](https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-justia.png)

#### ✨ Why use this scraper?

- **Rich rows out of the box** — ~20 fields per lawyer from the directory listing alone: name, phone, profile photo, practice areas, years of experience, city/state, law-firm website, badges (Claimed Profile, Offers Video, Q&A) and free-consultation flag.
- **Three ways in** — build listings from a location (+ optional practice area), paste listing URLs, or paste lawyer-profile URLs. Mix them in one run.
- **Beats Justia's block** — Justia serves datacenter scrapers a Cloudflare challenge; this actor routes every request through US residential IPs with a real browser fingerprint, so you get the real page.
- **Full profile on demand** — turn on *Scrape full profile pages* (or paste a profile URL) to add the law-firm name, full street address, geo coordinates, every bar membership, education, job titles, social links, fax, opening hours and the profile FAQ.
- **Every practice area & location** — personal injury, criminal, family, bankruptcy, business, immigration, real estate and more, in any US state or city.
- **Stable schema.org parsing** — reads Justia's embedded `Person` structured data plus the listing cards, so the output stays reliable.
- **JSON, CSV, Excel or API** — pipe straight into your CRM, sheet or pipeline. Billed per lawyer.

#### 🎯 Use cases

| You are a… | Use it to… |
|---|---|
| Legal marketer / lead-gen | Build targeted attorney lists by location, practice area and firm, with phone and website |
| Legal-tech / SaaS builder | Seed a lawyer/firm directory dataset with structured, deduplicated rows |
| Law firm / recruiter | Map the competitive landscape — who practices what, where, and how experienced they are |
| Market researcher | Measure attorney density, practice-area mix and experience distribution per city |
| Bar association / analyst | Cross-reference bar memberships, education and firm affiliations at scale |

#### 📥 Supported inputs

| Input | Example | What it does |
|---|---|---|
| Location | `california/los-angeles`, `texas` | Builds & paginates that location's lawyer directory |
| Location + practice area | `california/los-angeles` + `personal-injury` | Filters the directory to one practice area |
| Listing URL | `https://www.justia.com/lawyers/personal-injury/california/los-angeles` | Paginates that directory listing |
| Profile URL | `https://lawyers.justia.com/lawyer/{slug}-{id}` | Scrapes that single lawyer's full profile |

**Not supported:** case-law documents, client/message data, and anything behind a login. The actor reads only public Justia lawyer directory and profile pages.

#### ⚙️ How it works

1. **Classify** every input — locations (+ practice areas) become directory URLs; pasted URLs are sorted into listing / profile.
2. **Unlock** each page with a browser TLS fingerprint over a US residential IP, so the real page is returned instead of the Cloudflare challenge.
3. **Parse** each listing's lawyer cards + embedded `Person` structured data — ~40-50 lawyers per page; the `?page=2`, `?page=3` … sequence is followed automatically up to your limit.
4. **Enrich** each lawyer from their profile page (when *Scrape full profile pages* is on): firm, full address, geo, bar memberships, education, social links, opening hours and FAQ.
5. **Emit** one flat, deduplicated row per lawyer to the dataset.

#### ⚙️ Input parameters

| Field | Type | Default | Description |
|---|---|---|---|
| `locations` | array | `["california/los-angeles"]` | Locations as Justia path segments: `state/city` or `state`. |
| `practiceAreas` | array | — | Optional practice-area slugs, e.g. `personal-injury`, `criminal-law`. Each location × area builds one listing. |
| `startUrls` | array | — | Listing URLs and/or profile URLs. Auto-classified. |
| `scrapeDetails` | boolean | `false` | Also fetch each lawyer's profile page for firm, full address, geo, bar memberships, education, social links, FAQ (~2× requests). Pasted profile URLs are always fully detailed. |
| `maxItems` | integer | `1000` | Max rows for the whole run. |
| `maxItemsPerSearch` | integer | `1000` | Max lawyers per location / listing. |
| `maxConcurrency` | integer | `6` | Parallel requests. Keep moderate — Justia is Cloudflare-protected. |
| `maxRequestRetries` | integer | `20` | Retry budget per request on Cloudflare challenges (403), 429 and network errors. |
| `proxy` | object | Apify Residential, US | Applies to free-tier runs; paid runs use a built-in US residential pool. |

#### 📊 Output overview

Each dataset record is **one lawyer**. Listing rows carry the directory-card fields (name, phone, image, practice areas, experience, city/state, website, badges, free-consultation flag). When *Scrape full profile pages* is on — or for pasted profile URLs — the detail fields are added: firm name, full street address, geo coordinates, bar memberships, education, job titles, social links, fax, opening hours and the profile FAQ.

#### 📦 Output sample

```json
{
  "rowType": "lawyer",
  "lawyerId": "764389",
  "name": "Calvin Lee",
  "profileUrl": "https://lawyers.justia.com/lawyer/calvin-lee-764389",
  "phone": "805 409 7106",
  "website": "https://leelawfirmla.com",
  "image": "https://justatic.com/profile-images/764389-1755705424-sl.jpeg",
  "experienceYears": 23,
  "practiceAreas": ["Personal Injury", "Family", "Business"],
  "education": ["New Mexico"],
  "freeConsultation": true,
  "listingType": "organic/claimed",
  "firmName": "Law Office of Calvin Lee",
  "streetAddress": "6201 W 87th St, PMB B-63",
  "city": "Los Angeles",
  "state": "CA",
  "postalCode": "90045",
  "latitude": 33.9587712,
  "longitude": -118.3937367,
  "barMemberships": ["State Bar of California", "New Mexico State Bar"],
  "socialLinks": [
    "https://www.linkedin.com/in/calvin-lee-esq/",
    "https://www.avvo.com/attorneys/90045-ca-calvin-lee-4634206.html"
  ],
  "sourceMode": "profile",
  "scrapedAt": "2026-07-06T03:30:00.000Z"
}
````

#### 🗂 Key output fields

| Field | Type | Notes |
|---|---|---|
| `name` / `profileUrl` | string | Lawyer name + canonical Justia profile URL |
| `phone` / `website` | string | Contact phone + law-firm website |
| `image` | string | Profile photo URL |
| `practiceAreas` | string\[] | Practice areas shown on the card |
| `experienceYears` | number | Years of experience (parsed from the card) |
| `city` / `state` / `postalCode` | string | Office location |
| `freeConsultation` | boolean | Whether a free consultation is offered |
| `listingType` | string | `organic` / `premium` / `gold` / `claimed` |
| `badges` | string\[] | Claimed Profile, Offers Video Conferencing, Q\&A, Social Media |
| `firmName` / `streetAddress` | string | Law firm + full address (with detail / profile URLs) |
| `latitude` / `longitude` | number | Office geo coordinates (with detail) |
| `barMemberships` | string\[] | Bar/jurisdiction affiliations (with detail) |
| `education` | string\[] | Law schools / universities |
| `socialLinks` | string\[] | LinkedIn, Facebook, X, Avvo, etc. (with detail) |
| `jobTitles` / `fax` / `openingHours` / `faq` | — | Present with `scrapeDetails` / on profile URLs |

#### ❓ FAQ

**Can I get the lawyer's email?** Justia's public directory doesn't expose attorney email addresses, so the actor returns the public contact fields it does publish: phone, law-firm website and social links. Emails can be enriched from the firm website on request.

**How many lawyers can I get per location?** Justia returns ~40-50 lawyers per page and paginates deep. Combine a location with a practice area and `maxItemsPerSearch` to focus the run.

**What does *Scrape full profile pages* add?** The listing row is already rich (~20 fields). Turning it on visits each lawyer's profile to add the **firm name, full street address, geo coordinates, all bar memberships, education, job titles, social links, fax, opening hours and the profile FAQ** — at roughly double the requests. Profile URLs you paste are always fully detailed.

**Which locations and practice areas work?** Any US state or state/city Justia covers (e.g. `california/los-angeles`, `new-york/new-york`, `texas`) and any Justia practice-area slug (`personal-injury`, `criminal-law`, `family-law`, `bankruptcy`, `immigration-law`, `business-law`, and more).

**Do I need to configure proxies?** No. US residential routing is built in (Justia blocks datacenter IPs with Cloudflare). Just give it locations or URLs.

#### 💬 Support

Found a bug or need an extra field? Open an issue on the [actor's Issues tab](https://apify.com/memo23/justia-lawyer-directory-scraper/issues) and it'll be looked at quickly.

#### 🛠 Additional services

Need email enrichment from firm websites, another legal directory (Avvo, FindLaw, Martindale, Lawyers.com), or a scheduled attorney-data feed into your CRM or warehouse? Custom scraping and pipeline work is available on request.

#### 🔎 Explore more scrapers

Looking for more directory, company-data or professional-services sources? Check out the other directory, e-commerce and review scrapers in the same publisher's collection on the Apify Store.

***

### ⚠️ Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Justia Inc. or any of its subsidiaries or affiliates. All trademarks mentioned are the property of their respective owners.

The scraper accesses only publicly available Justia lawyer directory and profile pages — no authenticated endpoints, no login-only or private data. Attorney directory listings are published by Justia as public professional information. Users are responsible for ensuring their use complies with Justia's Terms of Service, applicable data-protection law (including GDPR and CCPA where relevant) and any contractual obligations of their own organisation. Use scraped personal data (such as lawyer names and contact details) lawfully and honour opt-out / do-not-contact requirements.

***

### SEO Keywords

justia scraper, scrape justia, justia lawyer scraper, justia lawyer directory scraper, justia attorney scraper, lawyer directory scraper, attorney data extraction, legal lead generation, scrape lawyers, law firm data scraper, attorney contact scraper, justia api, legal directory scraper, lawyer leads scraper, attorney directory data, practice area lawyer scraper, us lawyers dataset, law firm leads, justia lawyers extractor, apify justia

# Actor input Schema

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

Locations to scrape, as Justia path segments: `state/city` or just `state`. Examples: `california/los-angeles`, `new-york/new-york`, `texas`. Each is paginated. Combined with any practice areas below.

## `practiceAreas` (type: `array`):

Optional practice-area filters, as Justia slugs: `personal-injury`, `criminal-law`, `family-law`, `bankruptcy`, `business-law`, `divorce`, `dui-dwi`, `estate-planning`, `immigration-law`, `real-estate-law`. Each location × practice area builds one listing. Leave empty to scrape all lawyers in the location.

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

Direct listing URLs (`https://www.justia.com/lawyers/california/los-angeles`) and/or lawyer profile URLs (`https://lawyers.justia.com/lawyer/{slug}-{id}`). Auto-classified.

## `scrapeDetails` (type: `boolean`):

For each lawyer found in a listing, also fetch their profile page to add the firm name, full street address, geo coordinates, all bar memberships, education, job titles, social links, fax, opening hours and profile FAQ. Richer rows, but ~2× the requests. Off = the listing-card fields (already ~20 per lawyer). Profile URLs you paste are always fully detailed.

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

Hard cap on rows across the entire run. Each row is one paid `lawyer` event. Default 1000. Free-tier users are additionally capped at 100.

## `maxItemsPerSearch` (type: `integer`):

Cap per location / listing URL. Justia returns ~40-50 lawyers per page. Default 1000.

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

Parallel HTTP requests. Justia is protected by Cloudflare — keep this moderate (4-8). Default 6.

## `maxRequestRetries` (type: `integer`):

Per-request retry budget on Cloudflare challenges (403), 429 and network errors. Each retry rotates to a fresh residential IP. Default 20 (the Cloudflare challenge is flaky — more retries help break through).

## `proxy` (type: `object`):

Leave empty — the actor already routes all traffic through its own built-in residential proxy at no extra cost to you. Only set this if you want to use your own proxies.

## Actor input object example

```json
{
  "locations": [
    "california/los-angeles"
  ],
  "practiceAreas": [],
  "startUrls": [],
  "scrapeDetails": false,
  "maxItems": 1000,
  "maxItemsPerSearch": 1000,
  "maxConcurrency": 6,
  "maxRequestRetries": 20
}
```

# 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 = {
    "locations": [
        "california/los-angeles"
    ],
    "practiceAreas": [],
    "startUrls": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/justia-lawyer-directory-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 = {
    "locations": ["california/los-angeles"],
    "practiceAreas": [],
    "startUrls": [],
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/justia-lawyer-directory-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 '{
  "locations": [
    "california/los-angeles"
  ],
  "practiceAreas": [],
  "startUrls": []
}' |
apify call memo23/justia-lawyer-directory-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Justia Lawyer Directory Scraper - Attorney Data & Leads",
        "description": "Scrape lawyers from the Justia Lawyer Directory by location and practice area, or from listing / profile URLs. One row per attorney: name, phone, firm, address, practice areas, years of experience, education, bar memberships, website and social links. Optional full-profile enrichment. JSON/CSV out.",
        "version": "0.1",
        "x-build-id": "lgjAF81bjczXzLmPL"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/memo23~justia-lawyer-directory-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-memo23-justia-lawyer-directory-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/memo23~justia-lawyer-directory-scraper/runs": {
            "post": {
                "operationId": "runs-sync-memo23-justia-lawyer-directory-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/memo23~justia-lawyer-directory-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-memo23-justia-lawyer-directory-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": {
                    "locations": {
                        "title": "Locations",
                        "type": "array",
                        "description": "Locations to scrape, as Justia path segments: `state/city` or just `state`. Examples: `california/los-angeles`, `new-york/new-york`, `texas`. Each is paginated. Combined with any practice areas below.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "practiceAreas": {
                        "title": "Practice areas (optional)",
                        "type": "array",
                        "description": "Optional practice-area filters, as Justia slugs: `personal-injury`, `criminal-law`, `family-law`, `bankruptcy`, `business-law`, `divorce`, `dui-dwi`, `estate-planning`, `immigration-law`, `real-estate-law`. Each location × practice area builds one listing. Leave empty to scrape all lawyers in the location.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Listing & profile URLs",
                        "type": "array",
                        "description": "Direct listing URLs (`https://www.justia.com/lawyers/california/los-angeles`) and/or lawyer profile URLs (`https://lawyers.justia.com/lawyer/{slug}-{id}`). Auto-classified.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "scrapeDetails": {
                        "title": "Scrape full profile pages",
                        "type": "boolean",
                        "description": "For each lawyer found in a listing, also fetch their profile page to add the firm name, full street address, geo coordinates, all bar memberships, education, job titles, social links, fax, opening hours and profile FAQ. Richer rows, but ~2× the requests. Off = the listing-card fields (already ~20 per lawyer). Profile URLs you paste are always fully detailed.",
                        "default": false
                    },
                    "maxItems": {
                        "title": "Max results (whole run)",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Hard cap on rows across the entire run. Each row is one paid `lawyer` event. Default 1000. Free-tier users are additionally capped at 100.",
                        "default": 1000
                    },
                    "maxItemsPerSearch": {
                        "title": "Max lawyers per listing",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Cap per location / listing URL. Justia returns ~40-50 lawyers per page. Default 1000.",
                        "default": 1000
                    },
                    "maxConcurrency": {
                        "title": "Max parallel requests",
                        "minimum": 1,
                        "maximum": 15,
                        "type": "integer",
                        "description": "Parallel HTTP requests. Justia is protected by Cloudflare — keep this moderate (4-8). Default 6.",
                        "default": 6
                    },
                    "maxRequestRetries": {
                        "title": "Max request retries",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Per-request retry budget on Cloudflare challenges (403), 429 and network errors. Each retry rotates to a fresh residential IP. Default 20 (the Cloudflare challenge is flaky — more retries help break through).",
                        "default": 20
                    },
                    "proxy": {
                        "title": "Proxy configuration (optional override)",
                        "type": "object",
                        "description": "Leave empty — the actor already routes all traffic through its own built-in residential proxy at no extra cost to you. Only set this if you want to use your own proxies."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
