Nowe-Firmy.plNowe-Firmy.pl
Nowe aktywneWkrótce startująFirmy listopad 2025FunkcjeCennik
Strona głównaBlogBaza CEIDG - jak sprawdzić nowo powstałe firmy

Baza CEIDG - jak sprawdzić nowo powstałe firmy

25 stycznia 2025
5 min
Zespół Nowe Firmy
CEIDG
bazy danych
weryfikacja firm
prowadzenie firmy
Udostępnij artykuł

Najnowsze artykuły

Jak wykorzystać dane o nowych firmach w sprzedaży B2B

Poznaj strategie i techniki efektywnego wykorzystywania danych o nowo zarejestrowanych firmach w procesie sprzedaży B2B. Praktyczne porady i przykłady.

20 sty 2025

Gdzie znaleźć nowe firmy w Polsce - kompletny przewodnik 2025

Odkryj najlepsze źródła informacji o nowo zarejestrowanych firmach w Polsce. Praktyczny przewodnik z narzędziami i strategiami dla biznesu.

15 sty 2025
Nowe Firmy

Baza nowo zarejestrowanych firm w Polsce. Aktualne dane z CEIDG.

Produkt

  • Nowe Firmy
  • Funkcje
  • Ulubione
  • Cennik

Zasoby

  • O nas
  • FAQ
  • Kontakt
  • Blog

Prawne

  • Regulamin
  • Polityka prywatności

© 2025 Nowe Firmy. Wszelkie prawa zastrzeżone.

kontakt@nowe-firmy.pl

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:

  1. Zrozumienia struktury danych i ich ograniczeń
  2. Implementacji odpowiednich strategii wyszukiwania i filtrowania
  3. Automatyzacji procesów dla skalowalności
  4. 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.

Powiązane artykuły

Gdzie znaleźć nowe firmy w Polsce - kompletny przewodnik 2025

Odkryj najlepsze źródła informacji o nowo zarejestrowanych firmach w Polsce. Praktyczny przewodnik z narzędziami i strategiami dla biznesu.

Dotrzyj do nowych firm przed konkurencją

Znajdź swoich idealnych klientów w kilka sekund

Otrzymuj codziennie aktualne dane o nowo zarejestrowanych firmach i zacznij sprzedaż z klientami, którzy właśnie potrzebują Twoich usług.

Rozpocznij za darmoZobacz przykładowe firmy

Inteligentne wyszukiwanie

Filtruj firmy po branży, lokalizacji i PKD

1000+ firm dziennie

Świeże dane o nowych firmach z całej Polski

Dane kontaktowe

Telefony, emaile i adresy do bezpośredniego kontaktu