Pipeline en Python para extracción, segmentación y preparación de leads a partir del directorio público SIGEP (Función Pública — Colombia).
Diseñado para ventas B2G / outreach a personal de alto rango en entidades públicas (secretario de despacho, director, alcalde, gerente, etc.).
Nota: este repositorio publica código, documentación y samples sintéticos. Los datasets con nombres, correos y teléfonos reales no se versionan (PII).
SIGEP (web)
│
▼
[1] scraper.py → CSV por departamento (crudo)
│
▼
[2] classify.py → reglas de cargo (alto rango sí/no)
│
[3] clean.py → classify + solo cargos vigentes
│ → limpios_alto_rango/
▼
[4] email_ready.py → subset con correo válido
│ → limpios_alto_rango_con_correo/
▼
[5] normalize_contacts.py → tipografía ES + 1 archivo unificado
│ (+ text_format.py)
▼
[6] billionmail_export.py → import CSV (email + attributes JSON)
→ billionmail/02_billionmail_import.csv
| Etapa | Salida típica (corrida real, local) |
|---|---|
| Scraping nacional | ~395 000 filas · 33 departamentos |
| Alto rango + activos | ~21 000 filas |
| Con correo usable | ~13 500 filas |
| Email único + tipografía | ~13 000 filas |
| Import BillionMail | mismo set · formato email,attributes |
(Las cifras exactas dependen de la fecha de corrida y de la calidad de SIGEP. Los CSV reales viven solo en local.)
- Python 3.10+
requests+BeautifulSoup(scraping)csv/json(I/O y export)- Regex + normalización Unicode (cargos y tipografía)
unittest(tests del pipeline)
git clone https://github.com/blessed666-code/sigep-sales-intelligence.git
cd sigep-sales-intelligence
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txtDesde la raíz del repo:
# 1) Extraer (puede tardar horas a escala nacional)
python src/scraper.py
# 2) Segmentar alto rango + vigentes
python src/clean.py
# 3) Quedarse solo con correos válidos
python src/email_ready.py
# 4) Unificar + tipografía para plantillas
python src/normalize_contacts.py
# 5) Export formato BillionMail
python src/billionmail_export.py
# 6) Extensión a11y SIGEP (opcional — local, PII en a11y_outreach/)
python src/a11y_finalize.py --scan-widget --sin-playwright --workers 12
# 7) Universidades a11y (CSV libre + Observatorio — local, PII en universidades_a11y/)
PYTHONPATH=src:.vendor python src/ies_pipeline.py --sin-playwright --workers 8Detalle a11y SIGEP: docs/a11y_outreach.md.
Detalle universidades: docs/universidades_a11y.md.
Tests:
python -m unittest discover -s tests -vsigep-sales-intelligence/
├── README.md
├── LICENSE
├── requirements.txt
├── src/
│ ├── scraper.py
│ ├── classify.py
│ ├── clean.py
│ ├── email_ready.py
│ ├── text_format.py # tipografía ES / UTF-8-sig
│ ├── normalize_contacts.py # unificado para plantillas
│ ├── billionmail_export.py # email + attributes
│ ├── a11y_*.py # extensión calificación widgets (SIGEP)
│ └── ies_*.py # universidades + Observatorio + a11y
├── docs/
│ ├── architecture.md
│ ├── methodology.md
│ ├── a11y_outreach.md
│ ├── universidades_a11y.md
│ ├── plantillas_a11y_universidades/ # HTML con/sin overlay (IES)
│ └── guia_aprendizaje_scraping_http.md
├── sample/
│ ├── sample.csv
│ ├── sample_billionmail.csv
│ ├── a11y_metricas_ejemplo.csv
│ └── universidades_a11y_metricas_ejemplo.csv
├── assets/
│ └── pipeline.png
└── tests/
Carpetas locales ignoradas por Git (PII): limpios_*, billionmail/, a11y_outreach/, universidades_a11y/, datos_sigep/, *.csv reales.
Sobre los contactos ya normalizados, se agrupa por entidad, se resuelve la URL oficial y se detecta widget de accesibilidad (UserWay, EqualWeb, barra nativa gov, etc.). Sirve para priorizar outreach a11y Pro, no para el import BillionMail.
- Doc: a11y outreach
- Datos reales solo en local (
a11y_outreach/, gitignored) - Rama de trabajo sugerida:
work/a11y-outreach(no tocarmainhasta merge/PR)
No arranca de scrape SIGEP: parte de un CSV libre de IES + directorios del Observatorio (rectores / vicerrectores), califica widget a11y en el sitio oficial y exporta 2 grupos BillionMail (con/sin overlay) + plantillas HTML.
- Doc: universidades a11y
- Plantillas: plantillas_a11y_universidades
- Datos reales:
universidades_a11y/(gitignored) - Rama:
work/universidades-a11y
- Architecture — flujo técnico
- Methodology — cargos, vigencia, tipografía, BillionMail
- a11y outreach — calificación de widgets / campaña Pro (SIGEP / GOV.CO)
- Universidades a11y — IES + Observatorio + widget + BillionMail
- Plantillas universidades — HTML con/sin overlay
- Guía scraping HTTP — F12 → endpoint → requests/BS4 → cuándo Playwright/IA
| Archivo | Qué demuestra |
|---|---|
sample/sample.csv |
Columnas del scraping/limpieza |
sample/sample_billionmail.csv |
Formato de import email + attributes |
sample/a11y_metricas_ejemplo.csv |
Métricas agregadas a11y (sin contactos) |
sample/universidades_a11y_metricas_ejemplo.csv |
Métricas agregadas universidades |
sample/sample_billionmail_universidades.csv |
Import BillionMail sintético (IES) |
Nombres tipo Ejemplo / Demo / Sample / Muestra / Ficticia y dominios @ejemplo.gov.co / @demo.gov.co. No hay PII real.
- Fuente: directorio público de hojas de vida SIGEP (Función Pública).
- Uso responsable: no se publican dumps con datos personales en este repo.
- Código abierto + datos sensibles fuera de Git.
Danniel Mena — ARKA (Bogotá)
Scraping · data cleaning · sales intelligence
MIT — ver LICENSE.
