# Website Structured Profile Extractor (`madwezza/website-structured-profile-extractor`) Actor

Extract structured business, organization, contact, social, and metadata profiles from public websites.

- **URL**: https://apify.com/madwezza/website-structured-profile-extractor.md
- **Developed by:** [Omar Elwaziry](https://apify.com/madwezza) (community)
- **Categories:** Automation, Developer tools, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $100.00 / 1,000 profile 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

## Website Structured Profile Extractor

Extract structured business and organization profiles from public websites, including names, descriptions, contact details, social links, important pages, metadata, and JSON-LD signals.

### What this Actor does

Website Structured Profile Extractor visits public website pages and turns scattered website content into one normalized profile per domain. It is useful as a foundation for business verification, lead enrichment, website audits, vendor research, and AI-ready company profile datasets.

### Who it is for

- Sales and lead enrichment teams
- Market researchers
- Vendor and supplier researchers
- Developers building business-verification workflows
- Data teams preparing website profiles for AI agents or CRMs

### Data extracted

Each website profile can include:

- Website domain and final URL
- Page title and meta description
- Organization name and type from JSON-LD or website metadata
- Logo URL
- Public emails and phone numbers found on checked pages
- Address strings from structured data
- Social links
- Important links such as about, contact, careers, services, pricing, and blog pages
- Language hints
- Technology hints such as WordPress, Shopify, Wix, HubSpot, and analytics tags
- Pages checked
- JSON-LD types and optional JSON-LD snippets
- Compact public text sample
- Warnings and scrape timestamp

### Example input

```json
{
  "startUrls": ["https://www.apify.com", "https://www.mozilla.org"],
  "maxPagesPerSite": 5,
  "includeTextSample": true,
  "includeJsonLd": false,
  "requestTimeoutSecs": 25,
  "politeDelayMs": 500
}
````

### Example output

```json
{
  "id": "example.com-a1b2c3d4e5",
  "start_url": "https://example.com",
  "final_url": "https://example.com/",
  "domain": "example.com",
  "status": "ok",
  "http_status": 200,
  "title": "Example Company",
  "description": "Example Company builds useful software.",
  "organization_name": "Example Company",
  "organization_type": "Organization",
  "logo_url": "https://example.com/logo.png",
  "emails": ["sales@example.com"],
  "phones": ["+1 555 123 4567"],
  "addresses": ["1 Main St, New York, US"],
  "social_links": { "linkedin": "https://linkedin.com/company/example" },
  "important_links": {
    "about": ["https://example.com/about"],
    "contact": ["https://example.com/contact"],
    "careers": [],
    "pricing": [],
    "services": [],
    "blog": []
  },
  "pages_checked": ["https://example.com/", "https://example.com/contact"],
  "scraped_at": "2026-01-01T00:00:00.000Z"
}
```

### Use cases

- Build company profiles from website lists
- Prepare website evidence for business-verification APIs
- Enrich CRM records with public contact and social signals
- Detect missing public contact information
- Create AI-ready profile records for research agents
- Audit public websites for structured data quality

### Tips

- Start with homepages, not search results.
- Use `maxPagesPerSite` between 3 and 5 for normal enrichment.
- Enable `includeJsonLd` only when you need raw structured-data snippets.
- Verify contact details before sales, legal, or compliance use.

### Limitations

This Actor only collects public website pages. It does not log in, submit forms, bypass paywalls, bypass CAPTCHA, scrape private account data, or verify that public contact details are currently active. Output completeness depends on what each website exposes at run time.

### Changelog

- `0.1` Added public website profile extraction with metadata, JSON-LD, contact, social, important-link, and text-sample fields.

# Actor input Schema

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

Public website URLs to profile. Use homepages or important landing pages. Login-only pages are not supported.

## `maxPagesPerSite` (type: `integer`):

Maximum same-domain pages to inspect per website, including homepage and discovered contact/about pages.

## `includeTextSample` (type: `boolean`):

Include a compact public text sample useful for downstream AI classification.

## `includeJsonLd` (type: `boolean`):

Include parsed JSON-LD snippets when present. Large objects are truncated.

## `requestTimeoutSecs` (type: `integer`):

Timeout for each public page fetch.

## `politeDelayMs` (type: `integer`):

Delay between same-site page requests.

## `userAgent` (type: `string`):

Browser-like User-Agent for public-page compatibility.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.apify.com",
    "https://www.mozilla.org"
  ],
  "maxPagesPerSite": 5,
  "includeTextSample": true,
  "includeJsonLd": false,
  "requestTimeoutSecs": 25,
  "politeDelayMs": 500,
  "userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36"
}
```

# Actor output Schema

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

Default dataset containing one normalized profile per input website.

## `runStats` (type: `string`):

Summary of requested, emitted, failed, and warning counts.

# 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": [
        "https://www.apify.com",
        "https://www.mozilla.org"
    ],
    "maxPagesPerSite": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("madwezza/website-structured-profile-extractor").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": [
        "https://www.apify.com",
        "https://www.mozilla.org",
    ],
    "maxPagesPerSite": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("madwezza/website-structured-profile-extractor").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 '{
  "startUrls": [
    "https://www.apify.com",
    "https://www.mozilla.org"
  ],
  "maxPagesPerSite": 5
}' |
apify call madwezza/website-structured-profile-extractor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=madwezza/website-structured-profile-extractor",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Website Structured Profile Extractor",
        "description": "Extract structured business, organization, contact, social, and metadata profiles from public websites.",
        "version": "0.1",
        "x-build-id": "CxhiqBwZXaaeuhvuQ"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/madwezza~website-structured-profile-extractor/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-madwezza-website-structured-profile-extractor",
                "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/madwezza~website-structured-profile-extractor/runs": {
            "post": {
                "operationId": "runs-sync-madwezza-website-structured-profile-extractor",
                "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/madwezza~website-structured-profile-extractor/run-sync": {
            "post": {
                "operationId": "run-sync-madwezza-website-structured-profile-extractor",
                "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",
                "required": [
                    "startUrls"
                ],
                "properties": {
                    "startUrls": {
                        "title": "Website URLs",
                        "type": "array",
                        "description": "Public website URLs to profile. Use homepages or important landing pages. Login-only pages are not supported.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxPagesPerSite": {
                        "title": "Max pages per site",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Maximum same-domain pages to inspect per website, including homepage and discovered contact/about pages.",
                        "default": 5
                    },
                    "includeTextSample": {
                        "title": "Include text sample",
                        "type": "boolean",
                        "description": "Include a compact public text sample useful for downstream AI classification.",
                        "default": true
                    },
                    "includeJsonLd": {
                        "title": "Include JSON-LD objects",
                        "type": "boolean",
                        "description": "Include parsed JSON-LD snippets when present. Large objects are truncated.",
                        "default": false
                    },
                    "requestTimeoutSecs": {
                        "title": "Request timeout seconds",
                        "minimum": 5,
                        "maximum": 90,
                        "type": "integer",
                        "description": "Timeout for each public page fetch.",
                        "default": 25
                    },
                    "politeDelayMs": {
                        "title": "Polite delay milliseconds",
                        "minimum": 0,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Delay between same-site page requests.",
                        "default": 500
                    },
                    "userAgent": {
                        "title": "User-Agent",
                        "type": "string",
                        "description": "Browser-like User-Agent for public-page compatibility.",
                        "default": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36"
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
