# GEMI Greece Scraper — Greek Business Registry & KYB Data (`studio-amba/publicity-businessportal-gr-scraper`) Actor

Search Greek companies on GEMI, the national business registry. Look up by name, AFM (tax number) or GEMI number and get legal form, status, address, share capital, board members, representatives, branches and filing history. No API key, no login required.

- **URL**: https://apify.com/studio-amba/publicity-businessportal-gr-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** Business, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $7.00 / 1,000 result scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## GEMI Greece Scraper — Greek Business Registry & KYB Data

Search and extract Greek company data from [GEMI](https://publicity.businessportal.gr) (Γενικό
Εμπορικό Μητρώο — the General Commercial Registry), Greece's official national business register
run by the Ministry of Development. Look up a company by name, ΑΦΜ (tax registration number), or
GEMI registration number and get its legal form, registry status, registered address, phone,
email, founding date, share capital, board members, legal representatives, branch offices, and
filing history — in one structured pass, straight from the same public API GEMI's own search page
uses.

### How to scrape Greek company register data

This actor calls GEMI's own public search and company-profile API directly — the exact endpoints
`publicity.businessportal.gr` itself uses, no login and no API key required. It returns one
structured record per matching company: a company snapshot plus its board, legal representatives,
branches, and GEMI filing history, exported via the Apify API, CSV/Excel/JSON, or scheduled runs.

#### Search by name, ΑΦΜ, or GEMI number

Enter a company name (e.g. `ΟΠΑΠ`, `Coca Cola`), a Greek tax number/ΑΦΜ (e.g. `094024697`), or an
exact GEMI registration number (e.g. `263601000`) in **Company Name, AFM or GEMI Number** —
GEMI's own search matches all three transparently, so one field covers every lookup style.

#### Result limit

**Max Results** caps how many full company profiles the actor fetches per run (default 20, up to
200\). GEMI paginates its search results 10 per page; the actor walks as many pages as needed to
reach your limit, pacing requests to stay under GEMI's own rate limiter.

### What data does GEMI Greece Scraper extract?

| Field | Type | Description |
|-------|------|--------------|
| **companyName** | String | Registered company name |
| **legalForm** | String | Legal form abbreviation (e.g. `ΑΕ`, `ΕΠΕ`, `ΟΕ`, `ΙΚΕ`) |
| **status** | String | Registry status (e.g. `Ενεργή`/Active, `Διαγραφή`/Deregistered) |
| **gemiNumber** | String | GEMI registration number |
| **afm** | String | ΑΦΜ — Greek tax registration number |
| **address** | String | Registered address |
| **phone** | String | Contact phone number, where published |
| **email** | String | Contact email, where published |
| **website** | String | Company website, where published |
| **foundingDate** | String | Incorporation date (DD/MM/YYYY) |
| **dateGemiRegistered** | String | Date the company was entered into GEMI (DD/MM/YYYY) |
| **shareCapital** | String | Registered share capital |
| **currency** | String | Currency of the share capital (always `EUR`) |
| **businessPurpose** | String | Free-text corporate purpose / KAD activity codes |
| **chamberName** | String | Chamber of Commerce the company is registered under |
| **chamberRegistrationNumber** | String | Registration number at that Chamber |
| **officers** | Array | Board members — `{name, role, afm, dateFrom, dateTo}` |
| **officerNames** | String | Board member names, semicolon-separated (for quick scanning) |
| **representatives** | String | Legal representatives, semicolon-separated |
| **branches** | Array | Branch offices — `{gemiNumber, name, address}` |
| **alternateNames** | Array | Trade names / alternate titles the company also uses |
| **url** | String | Link to the company's GEMI profile page |
| **scrapedAt** | String | ISO timestamp of extraction |

### Input parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|--------------|
| **Company Name, AFM or GEMI Number** | String | `ΟΠΑΠ` | Search Greek companies by name, tax number, or registration number |
| **Max Results** | Integer | `20` | Maximum companies to return (1–200) |
| **Proxy Configuration** | Object | Automatic Apify proxy | Proxy settings |

### Example output

```json
{
    "companyName": "COCA-COLA ΕΛΛΗΝΙΚΗ ΕΤΑΙΡΕΙΑ ΕΜΦΙΑΛΩΣΕΩΣ ΑΝΩΝΥΜΟΣ ΕΤΑΙΡΕΙΑ",
    "legalForm": "ΑΕ",
    "status": "Διαγραφή",
    "gemiNumber": "263601000",
    "afm": "094024697",
    "address": "ΦΡΑΓΚΟΚΚΛΗΣΙΑΣ 9, ΑΜΑΡΟΥΣΙΟΥ / ΒΟΡΕΙΟΥ ΤΟΜΕΑ ΑΘΗΝΩΝ, 15125",
    "phone": "2106183100",
    "email": "",
    "website": "www.coca-colahellenic.com",
    "foundingDate": "24/05/1969",
    "dateGemiRegistered": "29/11/2013",
    "shareCapital": "370219042.07",
    "currency": "EUR",
    "businessPurpose": "Η ίδρυση εργοστασίων για την παραγωγή και συσκευασία...",
    "chamberName": "Δ/νση Εταιρειών (Γενική Γραμματεία Εμπορίου & Προστασίας Καταναλωτή)",
    "chamberRegistrationNumber": "72753",
    "officers": [
        { "name": "ΓΕΩΡΓΙΟΣ ΜΕΛΑΣ", "role": "Ανεξάρτητο μη Εκτελεστικό Μέλος", "afm": "033367219", "dateFrom": "24/04/2013", "dateTo": "30/06/2014" }
    ],
    "officerNames": "ΓΕΩΡΓΙΟΣ ΜΕΛΑΣ; GEORG DAVID",
    "representatives": "ΜΙΧΑΗΛ ΗΜΕΛΛΟΣ; ΝΙΚΟΛΑΟΣ ΜΑΜΟΥΛΗΣ",
    "branches": [
        { "gemiNumber": "263604001", "name": "COCA-COLA ΕΛΛΗΝΙΚΗ ΕΤΑΙΡΙΑ ΕΜΦΙΑΛΩΣΕΩΣ ΑΝΩΝΥΜΟΣ ΕΤΑΙΡΙΑ", "address": "17ΧΙΛ.ΠΡΟΣ ΠΟΛΥΓΥΡΟ-ΘΕΡΜΗ, ΘΕΣΣΑΛΟΝΙΚΗ, 57001" }
    ],
    "alternateNames": ["COCA-COLA HELLENIC"],
    "url": "https://publicity.businessportal.gr/company/263601000",
    "scrapedAt": "2026-08-26T09:33:18.197Z"
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

### Common use cases

- Build B2B prospecting lists enriched with ΑΦΜ, legal form, address, phone, and email.
- Verify a Greek supplier's, customer's, or partner's legal status, registered office, and board
  before signing a contract.
- KYB / KYC pre-checks — pull ΑΦΜ, legal form, registry status, share capital, and legal
  representative names in one pass.
- Track board and representative changes for companies you monitor, using GEMI's own filing
  history dates.
- Feed structured Greek company data into CRM enrichment or market-research pipelines, matching
  the field shape of our other European company-register actors.

### Cost estimate

Pricing is pay-per-result. Each run makes one lightweight JSON search request per 10-result page
plus one JSON profile request per matched company — no HTML parsing or browser rendering is used,
so compute cost per run is low. A run returning 20 companies typically makes around 22 total HTTP
requests, paced a couple of seconds apart to respect GEMI's own rate limiter. A run's usage cost
only settles after it reports SUCCEEDED.

### Tips

- A very specific query (an exact legal name, or an ΑΦΜ) returns just the matching company/branches
  — use this when you already know who you're looking for. A broader query (a brand or group name)
  returns every company and branch GEMI has on file under that name.
- Searching by ΑΦΜ returns every GEMI-registered branch that shares that tax number, which is a
  fast way to map out a group's full branch network.

### Limitations

- GEMI's board/representative history goes back only as far as the company's own GEMI filings —
  older companies that migrated from the pre-2013 legacy registries may have a shorter officer
  history than their real incorporation date suggests.
- Contact fields (phone, email, website) are genuinely sparse for smaller or dissolved companies
  on the source registry itself — this mirrors what a human visitor sees on the GEMI site, not a
  scraping gap. Core identity fields (name, ΑΦΜ, legal form, status, address, share capital) are
  populated for the large majority of results.
- Full deposited financial statements and PDF filing documents are referenced by GEMI (as file
  paths in the filing history) but not downloaded by this actor — only the structured profile
  fields above are extracted.

### Related scrapers

- **[Handelsregister Scraper](https://apify.com/studio-amba/handelsregister-scraper)** — German commercial register data.
- **[KVK Scraper](https://apify.com/studio-amba/kvk-scraper)** — Dutch Chamber of Commerce company data.
- **[Registro Imprese Scraper](https://apify.com/studio-amba/registro-imprese-scraper)** — Italian company register data.
- **[Empresia Scraper](https://apify.com/studio-amba/empresia-es-scraper)** — Spanish business registry data.
- **[Infogreffe Scraper](https://apify.com/studio-amba/infogreffe-scraper)** — French company register data (SIREN/SIRET).
- **[Companies House Scraper](https://apify.com/studio-amba/companies-house-scraper)** — UK company register data.
- **[North Data Scraper](https://apify.com/studio-amba/northdata-scraper)** — European company data across 16 countries.

### Data source and legality

This actor reads publicly available company data directly from GEMI's own public search API,
the same one `publicity.businessportal.gr` uses for its search page. It does not access any
login-protected area, does not require an API key, and identifies itself with a standard browser
user agent. Use the data in line with applicable data-protection rules, in particular when
handling personal data of named board members and legal representatives returned in some results.

# Actor input Schema

## `searchQuery` (type: `string`):

Search for a Greek company by name (e.g. 'ΟΠΑΠ' or 'Coca Cola'), by ΑΦΜ/AFM tax number (e.g. '094024697'), or by exact GEMI registration number (e.g. '263601000'). GEMI matches all three transparently.

## `maxResults` (type: `integer`):

Maximum number of companies to return full profiles for.

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

Select proxies to use. GEMI has no anti-bot protection (public JSON API); the automatic Apify proxy is enough to spread requests around its per-IP rate limiter.

## Actor input object example

```json
{
  "searchQuery": "ΟΠΑΠ",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "searchQuery": "ΟΠΑΠ",
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/publicity-businessportal-gr-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 = {
    "searchQuery": "ΟΠΑΠ",
    "maxResults": 20,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/publicity-businessportal-gr-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 '{
  "searchQuery": "ΟΠΑΠ",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call studio-amba/publicity-businessportal-gr-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,studio-amba/publicity-businessportal-gr-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/fZzS0vgMvKjUledIR/builds/isWBsw85ulFpzeTLd/openapi.json
