Skip to content

Repository files navigation

PressTracker

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_text and summary will be incomplete or blank.


One-time setup

Step 1 — Download the project

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

Step 2 — Install Python

Python is the language PressTracker runs on. You only need to install it once.

  1. Go to python.org/downloads and click the big Download Python button.
  2. Run the installer.
    • Windows: Check "Add Python to PATH" before clicking Install.
    • Mac: Follow the default steps.

Step 3 — Install dependencies (one time only)

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.

Step 4 — Make the launcher executable (Mac only, one time)

chmod +x start_mac.command

Starting the app

Mac: Double-click start_mac.command

  • If Mac blocks it: right-click → OpenOpen 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.


Using the web interface

The interface is organised into four steps.

Step 1 — Domains & Keywords

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 say domain.
    • 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 match cyberseguridad, 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.

Step 2 — Configure Your Search

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.

Step 3 — AI Summaries (optional)

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.

Step 4 — Automate — Daily Runs (optional)

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.


Running a search

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

Scheduled run results

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.


Output columns explained

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

Troubleshooting

"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 python3 and pip3 instead of python and pip.
  • Make sure you ran the pip3 install commands 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.

Project structure

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

Security note

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.


License

MIT — see LICENSE. Free to use, modify, and share for research purposes.

About

A no-code research tool that scrapes and filters news articles from any list of domains. Feed it keywords, get a spreadsheet. Supports date filters and language detection. Built for researchers with no programming experience.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages