About

A searchable archive of newsletters

mailwal subscribes to newsletters, keeps each issue and publishes a cleaned copy of it: with a summary, full text search and a link back to where the sender publishes it. It exists so good writing stays findable after it has scrolled out of an inbox.

How an issue gets here

  • Each newsletter is subscribed to by hand, with an address of its own that is not published anywhere.
  • Mail is received as it was sent and stored unchanged. Only a cleaned copy is ever shown.
  • The copy keeps the text, headings, links, images and tables. Scripts, styles, forms, tracking pixels and link parameters, unsubscribe and preference links, and anything that names the subscriber are removed. Images are loaded from the sender’s own servers, which can see that a page was opened.
  • A short summary and a few topics are written by a language model. They are labelled as a summary and can be wrong.

Publishers

Every issue names its newsletter and links to the sender’s own copy when there is one. If you publish a newsletter shown here and would rather it was not, or an issue should be corrected, write to [email protected]. The newsletter or issue is taken down promptly (within minutes), and nothing further is published unless you agree.

Reading the archive from code

Everything public is available as JSON, read-only and open to any origin. Responses may be cached for a minute. Please be considerate with request rates.

GET /api/v1/newsletters
Every newsletter, most recently published first.
GET /api/v1/newsletters/{slug}
One newsletter.
GET /api/v1/newsletters/{slug}/issues?limit=20&cursor=…
Its issues, newest first. next in the response is the cursor for the following page, or null.
GET /api/v1/issues?limit=20&cursor=…
The newest issues across all newsletters.
GET /api/v1/issues/{id}
One issue with its cleaned contentHtml, contentText and links.
GET /api/v1/search?q=…&limit=20&offset=0
Full text search. Quote a phrase to match it exactly; put - before a word to exclude it. snippet is HTML-escaped with matches in <mark>.
curl 'https://mailwal.com/api/v1/search?q=interest+rates&limit=3'

Browse the newsletters