PressTracker is a research tool that automatically collects and filters news articles from websites you choose. Give it a list of news domains and keywords; it finds matching articles and exports them to a spreadsheet.
No programming experience required. Everything is done through a browser-based interface — no terminal needed after the one-time setup.
Responsible use: Always check a website's Terms of Service before monitoring it. PressTracker inserts a 1-second delay between requests to avoid overloading servers. Use this tool for research purposes only.
Paywalled articles: PressTracker does not bypass paywalls. For paywalled content it can only access what any anonymous visitor sees — usually the headline and a short preview. The article may appear in your results if a keyword matches the title or teaser, but
full_textandsummarywill be incomplete or blank.
On the GitHub page, click the green Code button → Download ZIP. Unzip it and move the PressTracker folder somewhere easy to find (e.g. your Desktop).
Python is the language PressTracker runs on. You only need to install it once.
- Go to python.org/downloads and click the big Download Python button.
- Run the installer.
- Windows: Check "Add Python to PATH" before clicking Install.
- Mac: Follow the default steps.
Open a terminal inside the PressTracker folder and run:
Mac / Linux:
pip3 install -r requirements.txt
pip3 install -r requirements-web.txt
Windows:
pip install -r requirements.txt
pip install -r requirements-web.txt
To open a terminal in the folder — Mac: right-click inside the folder → New Terminal at Folder. Windows: click the address bar, type cmd, press Enter.
chmod +x start_mac.command
Mac: Double-click start_mac.command
- If Mac blocks it: right-click → Open → Open again.
Windows: Double-click start_windows.bat
Linux:
python3 app.py
Your browser will open automatically at http://localhost:8000. A terminal window stays open in the background — that is the engine running the app. Do not close it while using PressTracker.
The interface is organised into four steps.
Provide the websites to monitor and the keywords to search for. Each field has two modes:
- Upload file — upload a file you prepared in advance.
domains.csv: a spreadsheet with one URL per row, column header must saydomain.keywords.txt: a plain text file, one keyword or phrase per line.
- Enter manually — type directly into the text box, one entry per line. No file needed.
Wildcard matching: Add
*at the end of a keyword for prefix matching. For example,cyberseg*will matchcyberseguridad,cybersecurity, etc.
Non-English sites: Write keywords in the same language as the articles. You can mix languages — just add all variants, one per line.
| Setting | What it does |
|---|---|
| Maximum articles per website | Caps how many articles are collected from each domain. Set to 0 for no limit. |
| Articles from / until | Filter by publication date. Leave blank to include all dates. |
| Language filter | Include only articles in a specific language (detected automatically). |
| Output columns | Choose which columns appear in your results spreadsheet. |
Available output columns: Title, URL, Date, Author, Media name, AI summary, Matched keywords, Full text.
Paste your Anthropic API key to generate a 2-sentence AI summary for each matched article. Your key is used only during the session and is never stored to disk.
Get a free key at console.anthropic.com. If left blank, everything else still works — the summary column will be empty.
Schedule PressTracker to run automatically every day using the same settings from Steps 1–3.
- Run daily at — the time each run will fire.
- Until (last run date) — the schedule stops after this date.
Click Activate Schedule to start. Results from each run are saved separately and available to download at any time from the schedule status panel.
Important: The app must be running on your computer for scheduled runs to execute. Closing the terminal stops the schedule. Your API key (if provided) is stored in memory only and must be re-entered after restarting the app.
- Click Run Now to start a one-off search immediately. A live progress log will appear.
- Click Stop to cancel a run in progress — any articles collected so far will still be saved.
- When complete, click Download results.csv to get your spreadsheet.
The schedule status panel appears below the form once a schedule is active. It shows:
- The daily run time and end date
- A table of all past runs with their status and a Download CSV link for each
To stop the schedule at any time, click Cancel Schedule.
| Column | What it contains |
|---|---|
title |
The article headline |
url |
Web address — click to read the full article |
date |
Publication date (YYYY-MM-DD) |
author |
Author name(s), if found on the page |
media_name |
Name of the news outlet |
summary |
2-sentence AI summary (requires API key) |
matched_keywords |
Which of your keywords appeared in this article |
full_text |
Complete extracted article text |
"No articles were collected"
- Make sure your keywords actually appear in articles on those sites. Try a very common word to test.
- For non-English sites, write your keywords in the same language as the articles.
- Some sites block automated access. Try a different domain.
- If you set a date range, try widening it or removing it.
"domains.csv has no valid entries"
- Make sure the first row says exactly
domain(lowercase, no spaces). - If using manual entry, ensure each line is a full URL starting with
https://. - If using a file saved from Numbers or Excel on Mac, try saving as CSV (not the default .numbers format).
"ModuleNotFoundError" or "command not found: python"
- On Mac and Linux, use
python3andpip3instead ofpythonandpip. - Make sure you ran the
pip3 installcommands inside the PressTracker folder.
"AI summary is blank"
- Check that you ticked AI summary in the Output columns section (Step 2) and pasted an API key in Step 3.
- API keys start with
sk-ant-.
Scheduled run did not fire
- The app must be running at the scheduled time. Check that the terminal window is still open.
- After an app restart, API keys are cleared from memory — re-enter them before activating a new schedule.
The browser shows "Result not ready"
- The run may still be in progress. Wait for the progress log to complete before downloading.
PressTracker/
├── app.py ← Web server and scheduler
├── main.py ← Command-line entry point
├── config.yaml ← Settings for command-line usage
├── domains.csv ← Sample domains file
├── keywords.txt ← Sample keywords file
├── requirements.txt ← Core dependencies
├── requirements-web.txt ← Web interface dependencies
├── start_mac.command ← Mac launcher (double-click)
├── start_windows.bat ← Windows launcher (double-click)
├── schedules.json ← Auto-created: saved schedules
├── scheduled_results/ ← Auto-created: per-run CSV files
├── templates/
│ └── index.html ← Browser interface
└── modules/
├── crawler.py ← Discovers article URLs
├── extractor.py ← Extracts article text and metadata
├── filter.py ← Keyword, date, and language filters
├── summarizer.py ← Claude API summaries
└── exporter.py ← Writes results.csv
Never share your Anthropic API key publicly or commit it to a repository. When using the web interface, keys are held in memory only and never written to disk. The results.csv, schedules.json, and scheduled_results/ are excluded from git by default.
MIT — see LICENSE. Free to use, modify, and share for research purposes.