Baza CEIDG - jak sprawdzić nowo powstałe firmy
Centralna Ewidencja i Informacja o Działalności Gospodarczej (CEIDG) to fundamentalne źródło informacji o firmach w Polsce. Dla każdego, kto pracuje z danymi biznesowymi - analityka, handlowiec, przedsiębiorca czy badacz rynku - zrozumienie, jak efektywnie korzystać z bazy CEIDG, jest kluczową kompetencją.
Czym jest CEIDG?
CEIDG to system prowadzony przez Ministerstwo Rozwoju i Technologii, który gromadzi i udostępnia informacje o:
- Samozatrudnionych przedsiębiorcach
- Spółkach cywilnych (w tym sp. z o.o., sp.j., sp.k., sp.p.)
- Partnerach spółek cywilnych
- Jednoosobowych działalnościach gospodarczych
System zastępuje dawną ewidencję działalności gospodarczych (EDG) i od 2011 roku jest głównym rejestrem dla tego typu podmiotów.
Struktura danych w CEIDG
Podstawowe informacje
Każdy wpis w CEIDG zawiera:
| Pole | Opis | Przykład |
|------|------|----------|
| NIP | Numer identyfikacji podatkowej | 1234567890 |
| REGON | Numer statystyczny | 123456789 |
| Data rozpoczęcia | Data założenia działalności | 2025-01-15 |
| Forma prawna | Typ podmiotu | Sp. z o.o. |
| Główny PKD | Główny kod działalności | 62.01Z |
| Adres | Siedziba firmy | ul. Warszawska 1, 00-001 Warszawa |
Rozszerzone informacje
Dla wielu podmiotów dostępne są również:
- Dane kontaktowe: telefon, email, strona WWW
- Wspólnicy: imiona, nazwiska, udziały
- Przedmioty działalności: wszystkie kody PKD
- Informacje o rejestracjach VAT: status VAT, daty
- Historia zmian: zmiany w danych, przekształcenia
Dostęp do bazy CEIDG
1. Portal CEIDG
Oficjalny portal dostępny pod adresem: https://ceidg.gov.pl/
Funkcjonalności:
- Wyszukiwanie po NIP, REGON, nazwie
- Przeglądanie szczegółów firmy
- Pobieranie zaświadczeń o wpisie
- Sprawdzanie statusu VAT
Ograniczenia:
- Brak masowego eksportu danych
- Ograniczenia w wyszukiwaniu (rate limiting)
- Brak dostępu API dla publiczności
2. API CEIDG
Dla programistów i firm dostępne jest API CEIDG:
# Przykład użycia API CEIDG
import requests
import json
def get_company_by_nip(nip):
"""Pobiera dane firmy po numerze NIP"""
url = "https://api.ceidg.gov.pl/api/v1/companies"
params = {
'nip': nip,
'include': 'details,vat,partners' # Rozszerzone dane
}
headers = {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
}
response = requests.get(url, params=params, headers=headers)
if response.status_code == 200:
return response.json()
else:
return None
# Użycie
company_data = get_company_by_nip("1234567890")
if company_data:
print(f"Firma: {company_data['name']}")
print(f"Data założenia: {company_data['registration_date']}")
3. Alternatywne platformy
Istnieją platformy agregujące dane z CEIDG:
- Krajowy Rejestr Długów - dodatkowo weryfikuje wiarygodność
- Branżowe bazy danych - wyszukiwanie po PKD
- Komercyjne API - masowy dostęp do danych
Strategie wyszukiwania
1. Wyszukiwanie zaawansowane
Wykorzystaj kombinację kryteriów:
// Przykład zaawansowanego wyszukiwania
const searchParams = {
// Kryteria podstawowe
nip: "1234567890",
name: "Nowa Firma",
// Kryteria lokalizacyjne
voivodeship: "mazowieckie",
county: "Warszawa",
city: "Warszawa",
// Kryteria branżowe
pkdMain: "62.01", // IT
pkdSecondary: ["63.11", "73.11"], // Dodatkowe PKD
// Kryteria czasowe
registrationDateFrom: "2025-01-01",
registrationDateTo: "2025-01-31",
// Status VAT
vatStatus: "active"
}
2. Filtrowanie po PKD
Kody PKD (Polska Klasyfikacja Działalności) pozwalają na precyzyjne targetowanie:
| Popularne PKD dla nowych firm | Opis branży |
|----------------------------|-----------------|
| 62.01Z | Programowanie komputerów |
| 63.11Z | Działalności związane z telekomunikacją |
| 73.11Z | Reklama i badania rynku |
| 56.10Z | Działalności restauracyjne |
| 47.91Z | Sprzedaż detaliczna prowadzona przez sieci |
3. Monitorowanie czasowe
Ustaw regularne wyszukiwania dla nowych rejestracji:
import schedule
import time
from datetime import datetime, timedelta
def check_new_companies():
"""Sprawdza nowe firmy w określonych kryteriach"""
today = datetime.now()
yesterday = today - timedelta(days=1)
# Kryteria wyszukiwania
search_criteria = {
'registration_date_from': yesterday.strftime('%Y-%m-%d'),
'registration_date_to': today.strftime('%Y-%m-%d'),
'voivodeship': ['mazowieckie', 'małopolskie', 'dolnośląskie'],
'pkd': ['62.01Z', '63.11Z', '73.11Z']
}
results = search_ceidg(search_criteria)
for company in results:
# Przetwarzanie wyników
process_new_company(company)
# Powiadomienie
send_notification(company)
# Harmonogram - codziennie o 8:00
schedule.every().day.at("08:00").do(check_new_companies)
while True:
schedule.run_pending()
time.sleep(60)
Weryfikacja danych
1. Sprawdzanie spójności
Dane z CEIDG warto zweryfikować z innymi źródłami:
def verify_company_data(nip):
"""Weryfikuje dane firmy z wieloma źródłami"""
# Dane z CEIDG
ceidg_data = get_from_ceidg(nip)
# Dane z KRS
krs_data = get_from_krs(nip)
# Dane z VAT
vat_data = get_from_vat(nip)
# Sprawdzanie spójności
verification_results = {
'names_match': ceidg_data['name'] == krs_data['name'],
'addresses_match': ceidg_data['address'] == krs_data['address'],
'registration_dates_match': ceidg_data['registration_date'] == krs_data['registration_date'],
'vat_active': vat_data['status'] == 'active'
}
return verification_results
2. Ocena wiarygodności
Sprawdzaj dodatkowe wskaźniki:
| Wskaźnik | Jak sprawdzić | Co oznacza |
|------------|----------------|--------------|
| Historia | Data rozpoczęcia, zmiany | Stabilność firmy |
| Wspólnicy | Liczba i historia | Struktura właścicielska |
| Działalność | Aktywne PKD | Rzeczywisty zakres działalności |
| Finanse | Status VAT, długi | Sytuacja finansowa |
Automatyzacja procesów
1. Web scraping
Dla zaawansowanych użytkowników dostępne są techniki web scraping:
import requests
from bs4 import BeautifulSoup
import time
import random
def scrape_ceidg_results(search_params):
"""Web scraping wyników wyszukiwania CEIDG"""
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
}
# Losowe opóźnienia dla uniknięcia blokady
time.sleep(random.uniform(1, 3))
response = requests.get(
'https://ceidg.gov.pl/wyszukiwarki',
params=search_params,
headers=headers
)
if response.status_code == 200:
soup = BeautifulSoup(response.content, 'html.parser')
return parse_search_results(soup)
else:
return None
def parse_search_results(soup):
"""Przetwarza HTML z wynikami wyszukiwania"""
results = []
# Znajdź kontener z wynikami
results_container = soup.find('div', class_='search-results')
if results_container:
for item in results_container.find_all('div', class_='result-item'):
company_data = {
'name': item.find('h3').text.strip(),
'nip': item.find('span', class_='nip').text.strip(),
'address': item.find('div', class_='address').text.strip(),
'registration_date': item.find('span', class_='date').text.strip()
}
results.append(company_data)
return results
2. Integracja z systemami
Automatyzuj przepływ danych do Twoich systemów:
// Przykład integracji z CRM
const ceidgIntegration = {
// Automatyczne pobieranie nowych firm
fetchNewCompanies: async () => {
const yesterday = new Date();
yesterday.setDate(yesterday.getDate() - 1);
const newCompanies = await ceidgAPI.search({
registrationDateFrom: yesterday,
voivodeship: ['mazowieckie', 'małopolskie'],
pkd: ['62.01Z', '63.11Z']
});
return newCompanies;
},
// Przetwarzanie i dodawanie do CRM
processCompanies: async (companies) => {
for (const company of companies) {
// Ocena leadu
const leadScore = calculateLeadScore(company);
// Dodanie do CRM
await crm.addLead({
...company,
leadScore,
source: 'CEIDG',
dateAdded: new Date()
});
// Powiadomienie
if (leadScore > 80) {
await notificationService.notify({
type: 'high_value_lead',
company: company.name,
score: leadScore
});
}
}
}
};
// Harmonogram - co godzinę
setInterval(async () => {
const companies = await ceidgIntegration.fetchNewCompanies();
await ceidgIntegration.processCompanies(companies);
}, 3600000); // 1 godzina w milisekundach
Praktyczne zastosowania
1. Lead generation
Dla działów sprzedaży:
def generate_leads(target_criteria):
"""Generuje leady na podstawie kryteriów"""
# Pobierz nowe firmy
new_companies = get_new_companies(days_back=7)
# Filtruj po kryteriach
qualified_leads = []
for company in new_companies:
if matches_criteria(company, target_criteria):
# Ocena jakości leadu
score = calculate_lead_score(company)
qualified_leads.append({
'company': company,
'score': score,
'contact_priority': 'high' if score > 80 else 'medium'
})
# Sortuj po jakości
qualified_leads.sort(key=lambda x: x['score'], reverse=True)
return qualified_leads
# Przykład użycia
target_criteria = {
'voivodeship': ['mazowieckie'],
'pkd': ['62.01Z', '63.11Z'],
'min_capital': 50000,
'vat_active': True
}
leads = generate_leads(target_criteria)
for lead in leads[:10]: # Top 10 leadów
print(f"{lead['company']['name']} - Score: {lead['score']}")
2. Analiza rynkowa
Dla analityków:
def market_analysis(voivodeship, time_period):
"""Analiza rynku w określonym województwie"""
# Pobierz firmy z okresu
companies = get_companies_by_criteria({
'voivodeship': voivodeship,
'registration_date_from': time_period['start'],
'registration_date_to': time_period['end']
})
# Analiza PKD
pkd_analysis = analyze_pkd_distribution(companies)
# Analiza czasowa
time_analysis = analyze_registration_trends(companies)
# Analiza geograficzna
geo_analysis = analyze_geographic_distribution(companies)
return {
'total_companies': len(companies),
'pkd_distribution': pkd_analysis,
'time_trends': time_analysis,
'geographic_distribution': geo_analysis,
'insights': generate_insights(pkd_analysis, time_analysis)
}
# Przykład analizy
analysis = market_analysis(
voivodeship='mazowieckie',
time_period={
'start': '2025-01-01',
'end': '2025-01-31'
}
)
print(f"Nowych firm w województwie mazowieckim: {analysis['total_companies']}")
print(f"Najpopularniejsze PKD: {analysis['pkd_distribution']['top_5']}")
Ograniczenia i wyzwania
1. Ograniczenia techniczne
- Rate limiting: Ograniczenia liczby zapytań
- Brak bulk operations: Pojedyncze zapytania
- Czas odpowiedzi: Opóźnienia w godzinach szczytu
2. Ograniczenia prawne
- RODO: Ochrona danych osobowych
- Prawo autorskie: Zakaz kopiowania baz danych
- Warunki użytkowania: Komercyjne ograniczenia
3. Jakość danych
- Opóźnienia aktualizacji: 1-7 dni opóźnienia
- Błędy w danych: Nieścisłości w oficjalnych rejestrach
- Brakujące informacje: Nie wszystkie pola są wypełnione
Najlepsze praktyki
1. Optymalizacja zapytań
# Cache'owanie wyników
import redis
import json
import hashlib
def cached_search(search_params):
"""Wyszukiwanie z cache'owaniem"""
# Generuj klucz cache
cache_key = hashlib.md5(
json.dumps(search_params, sort_keys=True).encode()
).hexdigest()
# Sprawdź cache
cached_result = redis.get(f"ceidg_search:{cache_key}")
if cached_result:
return json.loads(cached_result)
# Wykonaj zapytanie
result = search_ceidg(search_params)
# Zapisz w cache na 1 godzinę
redis.setex(
f"ceidg_search:{cache_key}",
3600, # 1 godzina
json.dumps(result)
)
return result
2. Error handling
import time
from functools import wraps
def retry_on_failure(max_retries=3, delay=1):
"""Decorator do ponawiania zapytań"""
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
for attempt in range(max_retries):
try:
return func(*args, **kwargs)
except Exception as e:
if attempt == max_retries - 1:
raise e
print(f"Próba {attempt + 1} nieudana, ponów za {delay}s")
time.sleep(delay)
return None
return wrapper
return decorator
@retry_on_failure(max_retries=3, delay=2)
def get_company_data(nip):
"""Pobiera dane firmy z ponawianiem"""
return ceidg_api.get_company(nip)
Podsumowanie
Baza CEIDG to niezwykle cenne źródło informacji o firmach w Polsce. Efektywne wykorzystywanie tego zasobu wymaga:
- Zrozumienia struktury danych i ich ograniczeń
- Implementacji odpowiednich strategii wyszukiwania i filtrowania
- Automatyzacji procesów dla skalowalności
- Stosowania najlepszych praktyk w zakresie optymalizacji i obsługi błędów
Pamiętaj o zgodności z przepisami RODO i etycznym wykorzystywaniu danych. Regularne aktualizowanie wiedzy o zmianach w API CEIDG i dostosowywanie strategii pozwolą Ci utrzymać przewagę konkurencyjną na dynamicznym rynku polskim.
Ten artykuł jest częścią serii poradników biznesowych przygotowanych przez zespół Nowe Firmy. Sprawdź inne nasze artykuły, aby dowiedzieć się więcej o efektywnym pozyskiwaniu i wykorzystywaniu danych o firmach w Polsce.