Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SIGEP Sales Intelligence

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.).

Pipeline SIGEP → BillionMail

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).


Pipeline

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.)


Stack

  • Python 3.10+
  • requests + BeautifulSoup (scraping)
  • csv / json (I/O y export)
  • Regex + normalización Unicode (cargos y tipografía)
  • unittest (tests del pipeline)

Instalación

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.txt

Uso

Desde 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 8

Detalle a11y SIGEP: docs/a11y_outreach.md.
Detalle universidades: docs/universidades_a11y.md.

Tests:

python -m unittest discover -s tests -v

Estructura

sigep-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.


Extensión a11y (opcional)

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 tocar main hasta merge/PR)

Universidades / IES (fase educación superior)

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.


Documentación


Samples (ficticios / agregados)

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.


Ética y datos

  • 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.

Autor

Danniel Mena — ARKA (Bogotá)
Scraping · data cleaning · sales intelligence


License

MIT — ver LICENSE.

About

Python pipeline: SIGEP scraping → high-rank segment → BillionMail export

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages