You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
An end-to-end data pipeline that scrapes job postings from major Tunisian portals, stores them in PostgreSQL, extracts skills via NLP, generates AI-powered market summaries using a local LLaMA3 model, and exports clean datasets for Power BI dashboards.
Results
Metric
Value
Total jobs collected
1,200+
Sources scraped
4 portals
Skills tracked
75+
CSVs exported
10 files
AI summaries
Daily (LLaMA3)
Architecture
Scraping (Python + Selenium)
↓
PostgreSQL Database (7 tables)
↓
Analysis (NLP + pandas) → AI Summary (Ollama / LLaMA3)
↓
Data Cleaning (data/clean_data.py)
↓
CSV Export (data/export_data.py)
↓
Power BI Dashboard
# Download from https://ollama.com
ollama pull llama3
# Ollama starts automatically on port 11434
5. Run the pipeline
python main.py --once
This single command runs: scrape → analyze → AI summary → clean → export
Exported CSVs
File
Description
Power BI Use
jobs_clean.csv
All jobs — cleaned titles, locations, contracts
Main table
skills.csv
75+ skills with frequency + category
Bar chart, heatmap
by_location.csv
Jobs per Tunisian governorate
Map visual
by_contract.csv
CDI / CDD / SIVP / Stage breakdown
Donut chart
monthly_by_source.csv
Jobs per source per month
Trend line
top_companies.csv
Top 50 hiring companies
Bar chart
ai_summary.csv
Latest LLaMA3 market summary
Text card
Daily Automation
# Run once manually
python main.py --once
# Start daily scheduler (runs every day at 07:00)
python main.py
Utility Scripts
# Backfill descriptions for jobs scraped without detail pages
python update_descriptions.py
# Force fresh skills recount (e.g. after DB reset)
python recount_skills.py
Most in-demand languages: French + English (bilingual market)
Contract type: CDI dominates, followed by SIVP for graduates
Notes
LinkedIn scraping uses public job listings only (no login required)
Ollama runs entirely locally — no API costs
ReKrute yields fewer results due to server-side rate limiting
Run update_descriptions.py after each pipeline run to backfill descriptions for new jobs
Author
Chiraz Kitar — Data Analysis Project, June 2026
About
End-to-end data pipeline that scrapes Tunisian job portals (LinkedIn, Emploi.tn, Tanitjobs, ReKrute), stores data in PostgreSQL, analyzes skills & salaries with Python, summarizes trends with Ollama AI, and visualizes insights in a Power BI dashboard.