Cómo saber si una empresa está activa por NIF en España

Guía práctica para verificar el estado registral de una empresa española usando su NIF. Con ejemplos de código en JavaScript, Python y curl.

Cuando trabajas con otras empresas — como cliente, proveedor o inversor — necesitas saber si están realmente activas. Una empresa puede tener un NIF válido y seguir apareciendo en buscadores, pero estar disuelta, en concurso de acreedores o dada de baja en el Registro Mercantil desde hace años.

La fuente oficial para verificar esto en España es el BORME (Boletín Oficial del Registro Mercantil). El problema: consultar el BORME directamente implica parsear XMLs con estructura inconsistente o navegar manualmente por su web.

En esta guía te mostramos cómo hacerlo de forma programática en menos de 5 minutos.

Qué información obtienes del BORME

Cuando consultas una empresa por NIF obtienes:

  • Estado registral: activa, disuelta, en liquidación, cancelada
  • Nombre y nombre comercial
  • Domicilio social (municipio, provincia, código postal)
  • Fecha de constitución
  • Capital social
  • Histórico de actos: nombramientos de administradores, ceses, ampliaciones de capital, disoluciones, concursos de acreedores

Cualquiera de estos datos te permite tomar una decisión informada antes de firmar un contrato o iniciar una relación comercial.

Obtener tu API key gratuita

Primero necesitas una API key. El plan Free incluye 20 requests/mes sin tarjeta de crédito:

  1. Ve a apispain.es y haz clic en Empezar gratis
  2. Introduce tu email
  3. Guarda tu API key — solo se muestra una vez

Verificar una empresa por NIF

Con curl

La forma más directa. Sustituye B12345678 por el NIF que quieres consultar:

curl https://api.apispain.es/v1/borme/empresas/B12345678 \
  -H "Authorization: Bearer TU_API_KEY"

Respuesta:

{
  "id": "a1b2c3d4-...",
  "nif": "B12345678",
  "nombre": "EMPRESA EJEMPLO SL",
  "nombreComercial": null,
  "domicilio": "Calle Mayor 1",
  "municipio": "Madrid",
  "provincia": "Madrid",
  "codigoPostal": "28013",
  "estadoRegistral": "activa",
  "fechaConstitucion": "2018-04-12T00:00:00.000Z",
  "capitalSocial": "3000.00",
  "createdAt": "2026-01-15T09:30:00.000Z",
  "updatedAt": "2026-03-22T09:30:00.000Z"
}

El campo clave es estadoRegistral. Los valores posibles son:

ValorSignificado
activaEmpresa operativa
disueltaProceso de disolución iniciado
en liquidaciónEn proceso de liquidación
canceladaRegistralmente extinguida
desconocidoNo se encontró estado en el BORME

Con JavaScript (fetch)

const API_KEY = 'TU_API_KEY'
const NIF = 'B12345678'

async function verificarEmpresa(nif) {
  const res = await fetch(`https://api.apispain.es/v1/borme/empresas/${nif}`, {
    headers: { 'Authorization': `Bearer ${API_KEY}` }
  })

  if (res.status === 404) {
    return { activa: false, motivo: 'NIF no encontrado en el BORME' }
  }

  if (!res.ok) throw new Error(`Error ${res.status}`)

  const empresa = await res.json()

  return {
    activa: empresa.estadoRegistral === 'activa',
    nombre: empresa.nombre,
    estado: empresa.estadoRegistral,
    constituida: empresa.fechaConstitucion,
    municipio: empresa.municipio,
  }
}

// Uso
const resultado = await verificarEmpresa('B12345678')
console.log(resultado)
// { activa: true, nombre: 'EMPRESA EJEMPLO SL', estado: 'activa', ... }

Con Python

import requests

API_KEY = 'TU_API_KEY'

def verificar_empresa(nif: str) -> dict:
    url = f'https://api.apispain.es/v1/borme/empresas/{nif}'
    headers = {'Authorization': f'Bearer {API_KEY}'}

    res = requests.get(url, headers=headers)

    if res.status_code == 404:
        return {'activa': False, 'motivo': 'NIF no encontrado'}

    res.raise_for_status()
    empresa = res.json()

    return {
        'activa': empresa['estadoRegistral'] == 'activa',
        'nombre': empresa['nombre'],
        'estado': empresa['estadoRegistral'],
        'municipio': empresa.get('municipio'),
        'capital': empresa.get('capitalSocial'),
    }

# Uso
resultado = verificar_empresa('B12345678')
print(resultado)

Consultar el historial de actos del BORME

Saber que una empresa está “activa” a veces no es suficiente. Quizás quieres saber si ha habido cambios de administradores recientes, una ampliación de capital sospechosa o un concurso de acreedores que luego se resolvió. Para eso tienes el endpoint de actos:

curl https://api.apispain.es/v1/borme/empresas/B12345678/actos \
  -H "Authorization: Bearer TU_API_KEY"

Respuesta (extracto):

[
  {
    "tipoActo": "Nombramiento de administrador único",
    "fechaPublicacion": "2024-11-03T00:00:00.000Z",
    "seccion": "B",
    "datosParseados": {
      "nombre": "JUAN GARCÍA LÓPEZ",
      "cargo": "Administrador único"
    }
  },
  {
    "tipoActo": "Ampliación de capital",
    "fechaPublicacion": "2023-06-15T00:00:00.000Z",
    "seccion": "B",
    "datosParseados": {
      "capitalAnterior": "3000.00",
      "capitalNuevo": "50000.00"
    }
  }
]

Caso de uso real: validación automática en un CRM

Si tu aplicación registra nuevos clientes B2B, puedes validar automáticamente el NIF en el momento del alta:

async function validarClienteNuevo(nif, nombreDeclarado) {
  const empresa = await verificarEmpresa(nif)

  if (!empresa.activa) {
    throw new Error(`La empresa con NIF ${nif} no está activa en el Registro Mercantil`)
  }

  // Verificar que el nombre coincide (normalización básica)
  const nombreBorme = empresa.nombre.toLowerCase().replace(/\s+/g, ' ')
  const nombreInput = nombreDeclarado.toLowerCase().replace(/\s+/g, ' ')

  if (!nombreBorme.includes(nombreInput.split(' ')[0])) {
    console.warn(`Posible discrepancia de nombre: BORME="${empresa.nombre}", declarado="${nombreDeclarado}"`)
  }

  return empresa
}

Buscar empresas por nombre

Si no tienes el NIF pero sí el nombre, puedes buscarlo:

curl "https://api.apispain.es/v1/borme/empresas?nombre=acme&provincia=Madrid" \
  -H "Authorization: Bearer TU_API_KEY"

Devuelve un array de empresas que coinciden, con sus NIFs y estados registrales.

Límites del plan Free

El plan gratuito incluye 20 requests/mes, suficiente para casos de uso puntuales o desarrollo. Si necesitas verificar empresas en volumen, el plan Starter (22,99€/mes) incluye 300 requests/mes y el Pro requests ilimitados.

Consulta todos los planes en apispain.es/#precios.


¿Tienes preguntas sobre la integración? Escríbenos a hola@apispain.es.

Empieza gratis en 2 minutos

20 requests/mes gratis, sin tarjeta de crédito. API key lista al momento.

Ver documentación