A weekly news newsletter can be useful for keeping employees, clients, or customers informed about a specific industry, market, company, or risk area. The problem is that producing one manually means repeating the same work every week: searching for articles, deciding which stories matter, formatting them, and sending the email.
You can automate most of that process with the Webz.io News Search API and Google Apps Script.
Webz.io handles the news search. Google Apps Script runs the search on a schedule, selects the stories, builds the email, and sends it. You don’t need Zapier, Make, Mailchimp, or a paid AI API to get started.
In this tutorial, we’ll build a weekly newsletter about:
Supply chain disruptions affecting European car manufacturers
The same setup can later be used for almost any topic.
How the newsletter works
Once everything is configured, Google Apps Script runs automatically once a week. It sends a search request to the Webz.io News Search API, asking for articles relevant to the newsletter topic.
The request also includes filters that restrict the search to the period you care about. For a weekly newsletter, the script calculates a date seven days earlier and uses it as the published_from filter. You can also restrict results by language, category, source country, sentiment, or domain.
Webz.io returns the relevant articles in relevance order. The script then removes duplicate URLs, prevents one publication from dominating the newsletter, selects the final stories, creates an HTML email, and sends it to your recipients.
After the initial setup, the whole process can run without any manual work.
Understanding queries and filters
Before building the newsletter, it helps to understand an important distinction in the News Search API.
The query describes the information you want to find.
For our example, the query is simply:
Supply chain disruptions affecting European car manufacturers
You should not treat the query as a prompt for an AI agent. For example, you should avoid writing something like:
Find the most important stories from the last seven days about supply chain disruptions and prioritize major developments affecting European manufacturers.
Instructions such as “from the last seven days” do not belong in the query. The time period should be controlled with a filter.
The same applies to language, source country, categories, sentiment, and domains. These are structured restrictions and should be sent through the News Search API’s filters object.
A useful way to think about it is that the query answers what do I want to find?, while the filters answer which results should be allowed?
Webz.io uses semantic search, so the articles do not need to contain the exact wording of the query to be relevant. A search for supply chain disruptions affecting European car manufacturers can return relevant reporting that uses different terminology.
Be careful with the country filter
The country filter can be easy to misunderstand.
It refers to the country of the news source, not necessarily the country discussed in the article.
For example, imagine you want a newsletter about renewable energy investments in Germany. Germany should normally be part of the query:
Renewable energy investments and new energy projects in Germany
Adding Germany as the country filter would instead restrict the results based on where the news source is classified.
Use the country filter only when the origin of the publication matters to your newsletter.
Create a Webz.io account
Start by creating a Webz.io account and getting your API token (you can find it on the Webz.io dashboard)
The News Search API uses Bearer-token authentication. Your Google Apps Script will use this token every time it sends a request to Webz.io.
Do not place the API token directly inside code that you intend to share publicly. Google Apps Script provides Script Properties, which are a better place to store credentials.
Create a Google Apps Script project
Next, create a new Google Apps Script project and give it a name such as:
Weekly News Newsletter
You do not need to create a Google Sheet for this project. Apps Script can make the HTTP request to Webz.io, process the API response, build an HTML message, send email, and run on a schedule by itself.
This keeps the setup relatively simple. Webz.io provides the news, while Apps Script handles the automation.
Store your API token
Inside the Apps Script project, open Project Settings and find Script Properties.
Create a property called:
WEBZ_API_KEY
Set its value to your Webz.io API token.
The newsletter script can then retrieve the token when it runs. This keeps the credential separate from the source code.
Add the newsletter script
Open Code.gs, remove the default example code, and paste the newsletter script.
The script is designed so that most of the customization happens in one configuration section at the top. This is where you set the query, the number of days to search, the number of results to retrieve, the number of stories to include, the filters, the newsletter title, and the recipient addresses.
The rest of the script handles the API request, result processing, email formatting, delivery, and weekly schedule.
[Download Google Apps Script here]
Once the script is in place, you should rarely need to change anything outside that configuration section.
Choose a good newsletter query
The quality of the newsletter starts with the query.
For a cybersecurity newsletter, you might use:
Credential theft, infostealers and account takeover attacks affecting companies
For competitor monitoring:
Product launches, partnerships and acquisitions involving CrowdStrike, Palo Alto Networks and SentinelOne
For the semiconductor industry:
Semiconductor manufacturing investments and supply chain disruptions
For renewable energy:
Renewable energy investments and new energy projects in Germany
For regulation:
Artificial intelligence regulation in the European Union
These queries describe subjects rather than instructions.
If you want a weekly newsletter about AI regulation, for example, don’t add “published this week” to the query. Let the query describe AI regulation, and let published_from define the time period.
This separation makes the search more predictable and much easier to modify later.
Configure the search filters
For a typical weekly newsletter, the script automatically calculates the beginning of the search period based on the current date. If it runs every Monday and is configured for seven days, the API request contains a published_from value representing approximately one week earlier.
You can then decide whether to add other filters.
If the newsletter is intended for English-speaking readers, you can limit the search to English articles. If your topic is clearly business-related, you might also use the Economy, Business and Finance category.
It is usually better not to add filters unless they serve a real purpose. Too many filters can remove useful articles.
For example, a competitor newsletter about product releases, partnerships, acquisitions, and funding might contain stories classified under several categories. Leaving the category filter open could give you better coverage.
Sentiment filters can be useful in more specialized newsletters. A risk-monitoring newsletter might look only for negative reporting about suppliers or companies, while a general industry newsletter would normally include all sentiments.
Domain filters give you another level of control. You can restrict the search to publications you trust, or search broadly while excluding sources you don’t want to include.
Retrieve more stories than you plan to send
If your final newsletter contains eight stories, don’t necessarily ask the API for only eight results.
It is usually better to retrieve a larger pool, such as 20, 30, or 50 articles, and then choose from those results.
This is useful because several highly ranked stories may cover the same event, or several results may come from the same publication.
The newsletter script can apply a few simple editorial rules after the search. It can remove exact duplicate URLs and limit the number of stories taken from a single domain while preserving the original relevance ordering returned by Webz.io.
For example, the script might retrieve 30 articles but publish only the first eight that pass those rules.
This gives the newsletter more variety without requiring another service to decide which articles to keep.
Add your recipients
Start by putting your own email address in the test-recipient setting.
Once the newsletter looks right, configure the real recipients.
For an internal company newsletter, the recipient might simply be a company mailing list such as [email protected].
For clients, it is usually better to send separate messages rather than placing every address in the same To field. The script can loop through the recipient list and send the newsletter individually, preventing clients from seeing each other’s addresses.
Test the newsletter
Before scheduling anything, run the test function manually from the Apps Script editor.
The first time you do this, Google will ask you to approve the permissions needed by the script. It needs permission to connect to the Webz.io API and send email.
After authorization, run the test again and check your inbox.
A story in the newsletter might appear like this:
cnn.com · Aug 18, 2026
European automakers face new component shortages
A short summary of the article appears here.
Read the article →
The newsletter can use the title, URL, publication date, summary, source information, and other metadata returned by Webz.io.
If an article does not have a summary available, the script can fall back to the relevant passage returned with the search result.
That means you do not need an additional LLM just to create a useful first version of the newsletter.
What the API request looks like
For our supply-chain newsletter, the API request contains the query:
Supply chain disruptions affecting European car manufacturers
The request separately includes the filters. For example, it can specify that the article must have been published within the previous seven days, must be in English, and should belong to the Economy, Business and Finance category.
Keeping those two parts separate is one of the most important principles when using News Search.
The query controls relevance. The filters control eligibility.
Schedule the newsletter
Once the test newsletter looks right, create the Apps Script trigger.
For example, you can configure the script to run every Monday around 9:00 AM.
Apps Script will then start the newsletter function automatically each week. Make sure the timezone configured in the Apps Script project matches the timezone you want to use for delivery.
From that point on, the process is automatic. Apps Script calculates the start of the weekly period, sends the query and filters to Webz.io, receives the results, removes duplicates, chooses the final stories, builds the newsletter, and sends it.
Example: an internal cybersecurity newsletter
Imagine you want your security team to follow credential theft and infostealer activity.
Your query could be:
Credential theft, infostealers and account takeover attacks affecting companies
You could restrict results to English and, if useful, categories related to technology or crime and justice.
Every Monday, the team receives a compact collection of recent stories without someone having to manually search the news.
The same model can be used for ransomware, vulnerabilities, threat actors, data leaks, cybersecurity regulation, and other security topics.
Example: competitor monitoring
A sales or product team could use the same system to follow competitors.
For example:
Product launches, acquisitions, partnerships and funding involving CrowdStrike, SentinelOne and Palo Alto Networks
In this case, it might make sense to leave the category unrestricted. Relevant competitor stories may be classified in several different ways, and an unnecessary category filter could remove useful results.
The newsletter then becomes a simple weekly competitor briefing for sales, product, or management.
Example: a newsletter for clients
The same approach can be used as a client-facing information service.
Suppose your clients operate in renewable energy. Your query might be:
Renewable energy investments and new energy projects in Germany
The newsletter can run every Monday and send clients the latest relevant stories from the previous week.
Different clients can have different queries while using exactly the same underlying code.
One client might track renewable energy investments in Germany. Another might follow battery manufacturing projects in the United States. A third might want offshore wind regulation in the United Kingdom.
Only the configuration changes.
Adding sections later
A single search is a good place to start, but the newsletter can eventually contain several sections.
For example, an AI-industry newsletter might have a business section based on:
Investments and acquisitions involving artificial intelligence companies
A product section could search for:
New generative AI products and model releases
And a regulation section could search for:
Artificial intelligence regulation in the United States and European Union
Each section would make a separate News Search request. The script could then combine the results into one email.
It is usually better to get one query working well before adding this extra complexity.
Curating the publications
For some newsletters, broad coverage is useful. For others, controlling the source list matters more.
An executive briefing, for example, might search only a defined list of publications. A risk-monitoring newsletter might benefit from searching much more broadly.
Webz.io’s domain filters support both approaches. You can restrict the search to selected domains or exclude specific publications while keeping the rest of the search open.
Do you need AI-generated summaries?
Not necessarily.
The News Search API already returns the information needed for a basic newsletter, including article titles, URLs, publication dates, summaries, relevant passages, and metadata.
That is enough to create a clean weekly digest.
You can add an LLM later if you want a more editorial newsletter. For example, AI could write an introduction explaining what changed during the week, combine several articles about the same event, or explain why a story matters to a particular audience.
But those features are optional.
The basic workflow is much simpler:
Webz.io finds the news → Apps Script selects the stories → Gmail sends the newsletter.
Running it for free
A small weekly newsletter uses very little infrastructure. Instead of paying for a separate automation service, Apps Script handles the scheduled job and email delivery.
Your Webz.io usage depends mainly on how many searches you make and how many results you request. A newsletter based on one search per week requires relatively few API calls.
Google does impose email-sending quotas, so this setup is better suited to employee newsletters, client briefings, and smaller mailing lists than to large-scale marketing campaigns.
Turn almost any news search into a newsletter
Once the system is running, creating another newsletter is mostly a matter of changing the query and, when appropriate, the filters.
You could monitor:
Cyberattacks affecting healthcare companies
or:
New pharmaceutical clinical trial results for Alzheimer’s disease
or:
Funding and acquisitions involving European fintech companies
or:
Supply chain disruptions affecting semiconductor manufacturers
or:
New regulation affecting cryptocurrency exchanges
or:
News about companies developing humanoid robots
The underlying workflow does not change.
Webz.io finds the relevant news. Google Apps Script turns the results into an email and runs the process each week.
Once the script has been tested and the weekly trigger is active, the newsletter can keep running automatically with very little maintenance.