# EU Partnering Opportunities Scraper (Enterprise Europe Network) (`rel8ble/een-partnering-opportunities-scraper`) Actor

Use this to find European suppliers, manufacturers and buyers in the Enterprise Europe Network partnering database by keyword. One result = one business offer or request: company country, partnership type, description, sector keywords. No login. $1.50 per 1,000.

- **URL**: https://apify.com/rel8ble/een-partnering-opportunities-scraper.md
- **Developed by:** [Giovanni Rich](https://apify.com/rel8ble) (community)
- **Categories:** Lead generation, Business, E-commerce
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.50 / 1,000 results

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?

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

## EU Partnering Opportunities Scraper (Enterprise Europe Network)

**Find European suppliers, manufacturers, subcontractors and buyers from the Enterprise Europe Network (EEN) partnering database.** Search by keyword ("textile", "packaging machinery", "organic fertiliser", "CNC machining") and get every matching business offer and business request as clean JSON, CSV or Excel. Each row is one profile from a company that wants a cross-border partner: **offer or request, company country, partnership type (supplier agreement, commercial agreement, outsourcing, investment), partner type and size sought, target countries, full description, advantages, development stage, technology and market keywords**. Use it as a **B2B supplier finder**, a **sourcing and subcontracting lead list**, a **distributor / agent search** for your own product, or an unofficial **EEN partnering opportunities API** from your own code, Make, Zapier or n8n.

It works over plain HTTP, with **no browser and no login**. The database holds about 5,800 current profiles. A local test of the default input (20 profiles with full details) took 6 to 13 seconds on a home connection.

### What you get

- **Who and what**: reference number, profile type (Business Offer, Business request, Technology offer, Technology request, Research & Development Request), an `offer` / `request` side flag, headline, profile link.
- **Where**: company country, target countries where the partner should be (or "All countries").
- **What kind of deal**: partnership types (Supplier agreement, Commercial agreement, Commercial agreement with technical assistance, Outsourcing agreement, Investment agreement, R\&D cooperation), partner type and size sought (SME 11-49, SME 50 - 249, Big company, University ...), stage of development.
- **The text**: short summary, full description of the company and product range or need, advantages and innovations, technical specification or expertise sought, expected role of the partner, IPR status.
- **Sector tags**: EEN technology keywords and market keywords with their codes, sector groups, Sustainable Development Goals.
- **Dates**: publication date (read from the reference), start and end of the term of validity.
- **No personal data**: the actor does not collect contact persons, e-mails or phone numbers. Interest in a profile is expressed through your local Enterprise Europe Network partner, as the site intends.

### Sample output

Real rows from a run with the default input (`textile`, business offers, 20 profiles, detail pages on, run on 3 Nov 2026):

| Reference | Company country | Partnership sought | Headline |
|---|---|---|---|
| BOUA20261102023 | Ukraine | Commercial agreement | A Ukrainian manufacturer of asbestos-free thermal insulation and sealing materials seeks international distributors ... |
| BOIT20261102009 | Italy | Supplier agreement, Commercial agreement | Italian manufacturer seeks dental floss converters for its innovative polytetrafluoroethylene-free yarn under a supplier agreement |
| BOAT20261103024 | Austria | Outsourcing agreement | Austrian industrial design studio offers product design, CAD development and prototyping services ... |
| BOPT20261021006 | Portugal | Commercial agreement | Portuguese manufacturer of customised cork accessories and corporate gifts seeks distributors and commercial agents |
| BOSE20260930006 | Sweden | Commercial agreement, Supplier agreement | Swedish textile recycling company offering processed post-industrial and post-consumer textile feedstock ... |

On those 20 rows: reference, type, company country, partnership types, summary, description, advantages and expected partner role 100%; partner types, target countries and market keywords 100%; development stage 90%; technology keywords 65%; IPR status 70%; technical specification 20% (mostly requests); sector groups 45%. "textile" is the site's own full-text search, so a profile that mentions textiles in its description also matches (the second row is a yarn for dental floss).

### How to use

1. Put one or more search phrases in **Search phrases**, or leave the list empty to browse by filters only.
2. Pick **Profile types**: "Business Offer" for suppliers and service providers, "Business request" for companies looking for a supplier, or leave empty for everything.
3. Optionally narrow by **Partnership types** (e.g. Supplier agreement), **Target countries**, **Market keywords**, **Company countries** or a **Published on or after** date.
4. Set **Max profiles per search** (default 20; 0 = all matches, you pay per row) and run.

You can also paste a search URL from een.ec.europa.eu/partnering-opportunities (its filters are kept) or a single profile URL into the search list.

#### Input example

```json
{
  "searchTerms": ["packaging", "food processing machinery"],
  "profileTypes": ["Business Offer"],
  "partnershipTypes": ["Supplier agreement"],
  "companyCountries": ["Italy", "Poland", "Turkey"],
  "publishedAfter": "2026-06-01",
  "maxResultsPerSearch": 100
}
```

#### Output example (one row, shortened)

```json
{
  "searchTerm": "textile",
  "reference": "BOIT20261102009",
  "profileType": "Business Offer",
  "side": "offer",
  "title": "Italian manufacturer seeks dental floss converters for its innovative polytetrafluoroethylene-free yarn under a supplier agreement",
  "url": "https://een.ec.europa.eu/partnering-opportunities/italian-manufacturer-seeks-dental-floss-converters-its-innovative",
  "companyCountry": "Italy",
  "publishedDate": "2026-11-02",
  "validFrom": "2026-11-02",
  "validUntil": "2027-11-02",
  "partnershipTypes": ["Supplier agreement", "Commercial agreement"],
  "targetCountries": ["China", "Canada", "France", "Japan", "Germany", "United States", "India", "United Kingdom"],
  "partnerTypes": ["SME 50 - 249", "SME 11-49"],
  "developmentStage": "Already on the market",
  "summary": "An Italian SME producing technical yarns has developed a new dental floss yarn free of PTFE ...",
  "description": "The Italian company, based in Lombardy region, manufactures technical yarns ...",
  "technologyKeywords": [{ "code": "...", "label": "..." }],
  "marketKeywords": [{ "code": "...", "label": "..." }],
  "detailsIncluded": true
}
```

### Use cases

- **Supplier discovery**: find European manufacturers that already say they want supplier or commercial agreements in your product area.
- **Subcontracting and outsourcing leads**: `profileTypes: ["Business request"]` lists companies that are looking for a manufacturer or subcontractor, which is a ready-made list of buyers for a workshop or factory.
- **Distributor and agent search**: companies that offer a product and want distributors or agents in your country (`targetCountries`).
- **Market scans**: count profiles per sector keyword and country, track new profiles weekly with `publishedAfter`.
- **AI agents**: an agent can call this actor with a phrase and read back structured profiles (see the MCP note below).

### Pricing

**$1.50 per 1,000 results** (pay per result; one result = one profile). Apify platform usage is included in that price. Filtered rows, duplicates and failed requests are never charged, and there is no start fee. A 20-row run costs $0.03, and Apify's free plan ($5 of monthly credit) covers about 3,300 rows. I found no other Store actor for this database in the 21 Oct 2026 market snapshot, so there is no competitor price to compare with.

### Data source and terms

The data comes from the public partnering opportunities pages of the Enterprise Europe Network (een.ec.europa.eu), a European Commission service. Unless noted otherwise, the Commission licenses content on its websites under CC BY 4.0, which allows reuse with credit: please credit "Enterprise Europe Network, European Commission". The profile texts are written by the companies themselves and the actor repeats them as published; verify a partner before you sign anything. This actor is independent and not affiliated with the European Commission or the Enterprise Europe Network.

### FAQ

**Is there a login or API key?** No. Everything comes from public pages.

**Do I get contact details?** No. The site shows no company e-mail or phone on profiles. It asks interested companies to use the "Express interest" link or a local EEN partner. The actor collects no names, e-mails or phone numbers.

**What is the difference between "Target countries" and "Company countries"?** Target countries is where the company wants partners (the site's own filter; profiles open to all countries match too). Company countries is where the company is based; the site has no filter for it, so the actor applies it while reading. Rows that do not match are never charged, but many pages may be read to find enough matches.

**How many profiles are there?** About 5,800 at the time of writing: roughly 4,000 business offers, 400 business requests and the rest technology and R\&D profiles. New ones are added every day.

**What does "Open every profile page" do?** On (default), the actor opens each profile for the full text, validity dates and all keywords: one extra request per row. Off, it reads only the search cards (summary, company country, partnership types, keywords), which needs about a tenth of the requests (10 rows per page instead of 1 request per row). The price per row is the same.

**Why did a filter value get ignored?** Names are matched against the site's own filter lists (for example "Supplier agreement", "Germany"). Unknown names are reported in the log and in `RUN_SUMMARY`; if none of a filter's values exist the search stops without charging.

**Why is a phrase not found?** The site's search is full text but literal: "organic fertiliser" and "organic fertilizer" are different. Try a shorter or alternative phrase.

**Do I need a proxy?** Not by default. On 3 Nov 2026 the site answered Apify servers directly and residential proxy IPs, but blocked Apify datacenter proxy IPs with 403. If direct requests are ever blocked, set the proxy to the RESIDENTIAL group.

**For AI agents (MCP):** input is a list of search phrases plus optional filters (profile type, partnership type, target or company country, sector keyword, publication date); output is one JSON row per partnering profile with side (offer or request), company country, partnership types, partner sought, description and sector keywords; typical cost is $0.03 for 20 rows; use it when you need European suppliers, subcontractors, distributors or buyers in a given industry.

### Integrations

Run it from the Apify API, the Apify client libraries (JavaScript, Python), Make, Zapier, n8n, Google Sheets or any webhook. Schedule it daily with `publishedAfter` set to get only new profiles.

### Need a custom scraper or a ready dataset? Hire me on Fiverr: https://www.fiverr.com/rel8ble

# Actor input Schema

## `searchTerms` (type: `array`):

Optional. Words to find in partnering profiles, one search per line, e.g. "textile", "packaging machinery", "organic fertiliser". You can also paste a een.ec.europa.eu/partnering-opportunities search URL (its filters are kept) or a single profile URL. Leave empty to browse by the filters below only. Default \["textile"] (demo).

## `profileTypes` (type: `array`):

Optional. Which kind of profile to keep: "Business Offer" (a company offers products or services: your suppliers), "Business request" (a company looks for a supplier or partner: your buyers), "Technology offer", "Technology request", "Research & Development Request". Empty = all types. Default \["Business Offer"].

## `partnershipTypes` (type: `array`):

Optional. Keep profiles seeking one of these: "Supplier agreement", "Commercial agreement", "Commercial agreement with technical assistance", "Outsourcing agreement", "Investment agreement", "Research and development cooperation agreement". Empty = all.

## `partnerTypes` (type: `array`):

Optional. Keep profiles looking for this kind of partner, e.g. "SME 11-49", "SME 50 - 249", "Big company", "University". Names must match the site. Empty = all.

## `developmentStages` (type: `array`):

Optional. e.g. "Already on the market", "Under development", "Concept stage", "Lab tested", "Available for demonstration". Empty = all.

## `targetCountries` (type: `array`):

Optional. Country names such as "Germany", "Italy". Matches profiles that name the country or are open to all countries. This is where the company wants partners, not where it is based: use "Company countries" below for that. Empty = all.

## `technologyKeywords` (type: `array`):

Optional. Part of an EEN technology keyword or its code, e.g. "08003" or "agrofood". Several words = any of them. Empty = all.

## `marketKeywords` (type: `array`):

Optional. Part of an EEN market keyword or its code, e.g. "Textiles", "Food and beverage", "09004008". Several words = any of them. Empty = all.

## `companyCountries` (type: `array`):

Optional. Keep only profiles whose company is based in one of these countries, e.g. \["Italy", "Turkey"]. Applied after reading, so rows that do not match are never charged, but many pages may be read to find enough matches. Empty = all.

## `publishedAfter` (type: `string`):

Optional. Date as YYYY-MM-DD, e.g. "2026-09-01". Uses the creation date inside the profile reference. Empty = off.

## `publishedBefore` (type: `string`):

Optional. Date as YYYY-MM-DD. Empty = off.

## `maxResultsPerSearch` (type: `integer`):

Optional. Rows saved per search phrase, integer >= 0. Default 20; 0 = every profile that matches (up to about 5,800 with no filter). You pay per row.

## `includeDetails` (type: `boolean`):

Optional. On (default) = one extra request per profile for the full description, advantages, partner sought, validity dates and keywords. Off = card data only (summary, company country, partnership types, keywords), about a tenth of the requests; same price per row.

## `uniqueProfiles` (type: `boolean`):

Optional. A profile found by two search phrases is saved once. Default true.

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

Optional, advanced. 1-8, default 4. The site is a public EU service: keep it low.

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

Optional, advanced. Retries per failed request (each on a new proxy session), 0-20. Default 6.

## `proxyConfiguration` (type: `object`):

Optional, advanced. Default: no proxy, because the site answers Apify servers directly but blocks Apify datacenter proxy IPs with 403. Switch to {"useApifyProxy": true, "apifyProxyGroups": \["RESIDENTIAL"]} only if the log shows repeated blocks.

## Actor input object example

```json
{
  "searchTerms": [
    "textile"
  ],
  "profileTypes": [
    "Business Offer"
  ],
  "maxResultsPerSearch": 20,
  "includeDetails": true,
  "uniqueProfiles": true,
  "maxConcurrency": 4,
  "maxRequestRetries": 6,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

One row per partnering profile: offer or request, company country, partnership type, description, sector keywords.

## `summary` (type: `string`):

Per-search counts, ignored inputs and stop reasons.

# 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 = {
    "searchTerms": [
        "textile"
    ],
    "profileTypes": [
        "Business Offer"
    ],
    "maxResultsPerSearch": 20,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("rel8ble/een-partnering-opportunities-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 = {
    "searchTerms": ["textile"],
    "profileTypes": ["Business Offer"],
    "maxResultsPerSearch": 20,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("rel8ble/een-partnering-opportunities-scraper").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 '{
  "searchTerms": [
    "textile"
  ],
  "profileTypes": [
    "Business Offer"
  ],
  "maxResultsPerSearch": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call rel8ble/een-partnering-opportunities-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,rel8ble/een-partnering-opportunities-scraper"
        }
    }
}
```

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/MIOMciGncjKzrfWUq/builds/P1vY4Ifph2kmB2n6k/openapi.json
