Skip to main content
A source is where metalworks reads conversations. Out of the box it can read from Reddit, Hacker News, and the web; you can also plug in your own. Read from more than one and you get more evidence behind every report.

What’s available

Product Hunt is launches and the discussion around them — strongest for sizing up the competitive landscape (what already exists and how it landed), a complement to the unmet-need signal on Reddit and Hacker News. It needs a free, non-expiring developer token from the Product Hunt API dashboard; set it as PRODUCT_HUNT_TOKEN. Product Hunt has no keyword search, so the source pulls the top launches (by votes) in your time window and lets the relevance step filter them.

Pick what to read from

By default metalworks reads Reddit. To use others, name them when you run:
In Python, pass the sources you want:
You don’t have to set anything up first — a single mw.research(...) reads the sources you chose and produces a report in one call.

How mixed sources are ranked

When a report draws on more than one source, a need is ranked by how many different people raised it — not by how viral a single post was. Fifty people each mentioning a problem once outranks one post with five hundred upvotes. Web pages (which have no author) count by how many different sites raised the point. The upshot: no single source can drown out the others.

Add your own source

A source is a small piece of code that fetches items and hands them to metalworks in a common shape. To add one, copy research/sources/template.py and fill in three methods:
Once registered, it works like any built-in: --source mysource, get_source("mysource"), or Metalworks(sources=[MySource()]). If your source has no comments (a web page, a product listing), return None from comments_for and add yields_units = True to the class. metalworks then treats each item’s own text as the thing people are talking about. To check your source is wired up correctly, use metalworks.testing.check_item_source in your tests.

Next