cd /news/ai-tools/i-got-tired-of-checking-15-ai-sites-… · home › topics › ai-tools › article
[ARTICLE · art-156522] src=dev.to ↗ pub= topic=ai-tools verified=true sentiment=↑ positive

I Got Tired of Checking 15 AI Sites Every Morning, So I Built a Pipeline That Does It While I Sleep

A developer built Global Intelligence Graph, an open-source data ingestion pipeline that scrapes arXiv, Papers with Code, GitHub, five AI news sites and five job boards, then uses an LLM extraction layer to normalize the results into SQLite and CSV exports. The extractor converts raw payloads into validated Pydantic models, enforces a 24-hour freshness rule, and resolves entity names via fuzzy matching against a canonical dictionary. To survive free-tier rate limits, it falls back across Gemini, Groq's Llama 3 and DeepSeek with a 5-second processing delay between calls.

by read4 min views5 publishedOct 24, 2026

This is a submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady

#

What I Built

Global Intelligence Graph is a data ingestion engine that keeps an eye on the AI world so I don't have to.

Staying current in AI means opening arXiv, Papers with Code, GitHub, a handful of news sites and several job boards, then copy-pasting the interesting bits somewhere. I dreaded that chore, so I automated it. One command now:

Scrapes research: the latest AI papers from arXiv and Papers with Code, plus GitHub star counts for papers that have repos. #

Finds startups and products: it queries the GitHub API for repositories and extracts startup and product entities from them. #

Reads the news: it pulls articles from 5 major AI news sources and keeps only those published in the last 24 hours. #

Watches the job market: it scrapes 5 AI job boards with Playwright and converts relative dates ("3 hours ago") into absolute ISO timestamps, again keeping only the last 24 hours. #

Cleans up the mess: it resolves entity names against a canonical dictionary using fuzzy matching, so "Open AI" and "OpenAI" become one entity. #

Hands over tidy data: everything lands in SQLite and is exported as structured CSVs inoutput/ .

Anyone who tracks the AI ecosystem (students, researchers, recruiters, founders) gets to be a little lazier: the morning tab-hopping becomes opening a folder of CSVs.

#

Code

This repository contains the data ingestion pipeline for the AI Engineer demo task. It is designed for massive bulk extraction, 24-hour freshness tracking, and resilient LLM extraction using a multi-tier fallback architecture.

Setup Instructions #

Python Environment : Ensure you have Python 3.11+ installed. 2. Install Dependencies 3. Configure Environment Variables : Open the.env file in the root directory and add your API keys:(Note: You can run the pipeline with just one of these keys, but the fallback chain works best when all three are present.)

Running the Pipeline #

To execute the pipeline:

Pipeline Flow

Phase I (Arxiv, Papers with Code & GitHub) : Scrapes the latest AI research papers from Arxiv and Papers with Code. Queries the GitHub API for repositories to extract Startup and Product…

#

How I Built It

The pipeline runs in four phases:

Phase I, research and GitHub. Scrapers collect papers from arXiv and Papers with Code. The GitHub API supplies repositories (the source of startup and product entities) and star counts. 2. Phase II, news and jobs. News articles are fetched from 5 sources. Job listings come from 5 JavaScript-heavy boards, so I used Playwright to render them. 3. Phase III, LLM extraction. AnLLMExtractor turns messy raw payloads into validatedPydantic models. It also enforces the 24-hour freshness rule, so stale items never reach the database. 4. Phase IV, entity resolution. Company names across startups, products and jobs are normalized with fuzzy matching against a canonical dictionary.

Results are stored in an intermediate SQLite database (data_ingestion.db) that preserves relationships and raw payloads, then exported to CSV.

The multi-tier LLM fallback

Free-tier LLM APIs hit 429 rate limits constantly when you're doing bulk extraction. Rather than crash or pay for a bigger plan, the extractor falls back across providers:

**Gemini → Groq (Llama 3) → DeepSeek**

If one provider rate-limits, the next takes over, and a 5-second processing delay keeps the load gentle. You can run it with just one key, but it's most resilient with all three. Two of the three tiers are open-weight model families (Llama 3 and DeepSeek), so the extraction layer is not tied to a single closed vendor.

#

Why Does Open Innovation Matter?

Bulk extraction is exactly where closed APIs hurt: thousands of small calls, strict quotas, and a bill that grows with every page scraped.

No single point of failure. Because Llama 3 and DeepSeek are open-weight, many providers can serve them. My pipeline can swap models and hosts without rewriting the extraction logic, and a rate limit on one provider is a detour, not an outage. #

Cost stays near zero. Open-weight models on free or cheap tiers let me run a daily pipeline without a subscription. #

Swappable by design. The fallback chain is just an ordered list. Adding a locally hosted open-weight model (for example through Ollama) as another tier, or the first one, is a small change that would make the pipeline work fully offline with no data leaving my machine. #

Open tools all the way down. Playwright, SQLite, Pydantic and the GitHub and arXiv ecosystems are all open, which made the whole thing easy to build and inspect.

── more in #ai-tools 4 stories · sorted by recency
── more on @global intelligence graph 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
→ Live at https://your-agent.zahid.host ✓
Get free account → Pricing
from €0/mo · no card required
LIVE [news/i-got-tired-of-check…] indexed:0 read:4min 2026-10-24 · —