# European Construction Opportunity Intelligence (`peposimao/european-construction-opportunity-intelligence`) Actor

Find qualified construction opportunities from public permit data. Classify projects, detect commercial opportunities, and score leads by construction potential and data quality. France is currently supported, with additional European countries planned.

- **URL**: https://apify.com/peposimao/european-construction-opportunity-intelligence.md
- **Developed by:** [João Pedro Simão Laragnoit](https://apify.com/peposimao) (community)
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## European Construction Opportunity Intelligence

Discover and qualify construction opportunities from public permit data across Europe.

The Actor analyzes construction permit records, classifies project types, identifies commercial opportunities, and assigns construction and lead quality scores to help contractors, suppliers, manufacturers, developers, and construction service providers find relevant projects faster.

France is currently supported, with additional European countries planned.

***

### What this Actor does

European Construction Opportunity Intelligence transforms public construction permit data into structured commercial leads.

Instead of returning only raw permit records, the Actor enriches each project with:

- Project classification
- Residential and non-residential identification
- Non-residential project subtype detection
- Mixed-project component detection
- Construction opportunity scoring
- Lead quality scoring
- Commercial opportunity detection
- Applicant information
- Permit information
- Project size indicators
- Source transparency

The result is a dataset designed to help identify construction projects that may represent relevant business opportunities.

***

### Currently supported countries

#### France

France is currently the first supported country.

The Actor uses construction permit information from available French public data sources.

Depending on availability and location, the Actor can use:

- Aucadastre
- Official French SDES DiDo / Sitadel data as fallback

Additional European countries can be added in future versions without changing the core purpose of the Actor.

***

### Key features

#### Residential and non-residential projects

The Actor distinguishes between:

- Residential
- Non-residential

This allows users to focus on the type of construction project most relevant to their business.

***

#### Non-residential project classification

Non-residential projects can be classified into the following subtypes:

- Office
- Retail / Services
- Hotel / Accommodation
- Industrial
- Warehouse
- Public Facility
- Agricultural
- Mixed Non-residential
- Other Non-residential

***

#### Mixed project detection

Projects may contain more than one non-residential use.

When multiple relevant components are detected, the Actor can return them through:

- `project_components`
- `project_components_text`

This makes it easier to understand complex projects such as developments combining offices, retail, accommodation, industrial space, or other uses.

***

### Commercial opportunity detection

The Actor analyzes each project and identifies potential commercial opportunities.

Supported opportunity types include:

- General contractor
- Building materials
- Electrical
- Plumbing
- HVAC
- Windows
- Insulation
- Roofing
- Property development services
- Construction suppliers

Each result can include:

- `matched_opportunity`
- `matched_opportunity_score`
- `top_opportunity`
- `top_opportunity_score`
- `opportunity_types`
- `opportunities`

This helps users identify projects that may be especially relevant to their products or services.

***

### Construction Opportunity Score

Each qualified project receives a:

`construction_opportunity_score`

The score ranges from:

`0` to `100`

Higher scores indicate projects with stronger construction opportunity signals based on available permit and project information.

The Actor also provides:

`construction_reasons`

This field contains the main factors that contributed to the construction opportunity score.

***

### Lead Quality Score

Each result also receives a:

`lead_quality_score`

The score ranges from:

`0` to `100`

This score evaluates the completeness and commercial usability of the available record.

The Actor also returns:

`lead_quality_level`

Higher lead quality generally indicates that more useful identifying or project information is available.

The field:

`missing_fields`

can be used to understand which important pieces of information were unavailable for a record.

***

### Input

The Actor provides a configurable input form.

#### Country

Select the country to search.

Currently supported:

- France

***

#### City

Select a major French city or commune.

Examples include:

- Paris
- Marseille
- Lyon
- Toulouse
- Nice
- Nantes
- Montpellier
- Strasbourg
- Bordeaux
- Lille

Additional French communes can also be used when supported by the underlying source.

***

#### Project Family

Optional filter.

Available values:

- Residential
- Non-residential

Leave empty to include both.

***

#### Project Subtype

Optional filter for non-residential projects.

Available values:

- Office
- Retail / Services
- Hotel / Accommodation
- Industrial
- Warehouse
- Public Facility
- Agricultural
- Mixed Non-residential
- Other Non-residential

***

#### Permit Type

Optional permit filter.

Currently supported:

- `PC` - Construction permit
- `DP` - Prior declaration

Leave empty to include all supported permit types.

***

#### Opportunity Types

Optional commercial opportunity filter.

Available values include:

- General contractor
- Building materials
- Electrical
- Plumbing
- HVAC
- Windows
- Insulation
- Roofing
- Property development services
- Construction suppliers

When one or more opportunity types are selected, the Actor returns only projects matching at least one selected opportunity.

Leave empty to include all opportunity types.

***

#### Minimum Construction Opportunity Score

Default:

`40`

Range:

`0 - 100`

Only projects with a construction opportunity score equal to or above the selected value are returned.

Higher values produce fewer and more selective results.

***

#### Minimum Lead Quality

Default:

`40`

Range:

`0 - 100`

Only records with a lead quality score equal to or above the selected value are returned.

Higher values favor more complete and usable leads.

***

#### Maximum Results

Default:

`10`

Minimum:

`1`

Maximum:

`100`

Defines the maximum number of qualified construction opportunities returned after filters and score thresholds are applied.

***

### Example input

````json
{
  "country": "France",
  "city": "Bordeaux",
  "projectFamilies": [
    "local"
  ],
  "projectSubtypes": [
    "hotel_accommodation"
  ],
  "permitKinds": [
    "PC"
  ],
  "opportunityTypes": [
    "plumbing",
    "windows"
  ],
  "minimumScore": 40,
  "minimumLeadQuality": 40,
  "limit": 10
}



# Actor input Schema

## `country` (type: `string`):

Country to search.
## `city` (type: `string`):

Select a major French city or type any commune name.
## `projectFamilies` (type: `array`):

Optional. Filter by residential or non-residential projects. Leave empty to include both.
## `projectSubtypes` (type: `array`):

Optional. Filter non-residential projects by subtype.
## `permitKinds` (type: `array`):

Optional. Filter by permit type. Leave empty to include all supported permit types.
## `opportunityTypes` (type: `array`):

Optional. Return only permits matching at least one selected commercial opportunity type. Leave empty to include all opportunity types.
## `minimumScore` (type: `integer`):

Minimum construction opportunity score required for a permit to be returned. Higher values produce fewer, more selective results.
## `minimumLeadQuality` (type: `integer`):

Minimum lead quality score required for a record to be returned. Higher values favor more complete and reliable leads.
## `limit` (type: `integer`):

Maximum number of qualified construction opportunities to return after applying the selected filters and score thresholds.

## Actor input object example

```json
{
  "country": "France",
  "city": "Paris",
  "limit": 10
}
````

# Actor output Schema

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

No description

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("peposimao/european-construction-opportunity-intelligence").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("peposimao/european-construction-opportunity-intelligence").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 '{}' |
apify call peposimao/european-construction-opportunity-intelligence --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,peposimao/european-construction-opportunity-intelligence"
        }
    }
}
```

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/lU2VNz8Dzoa2dHZHR/builds/mvK6AoeN28v9YPfb9/openapi.json
