What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more
Yes, you can decode a batch of Google News article or RSS links with one shared Google batch request, but a “one API call” workflow still fetches each article page first to obtain its decoding parameters. A 429 response means Google is rate-limiting those requests, not that the link is necessarily invalid. The practical fix is to submit a list, add a measured interval, bound retries, and record a result for every original URL. For a fresh installation, pin selectolax below 1.0 because googlenewsdecoder 0.2.1 imports a parser module removed in selectolax 1.0.0.
This guide explains the request flow, working Python examples, failure handling, dependency workaround, and the trade-off between running the decoder locally and using a hosted batch actor.
Why is googlenewsdecoder returning 429?
HTTP 429 means Google is limiting the rate of requests from your client or IP address. In this package, decoding normally involves a request for each Google News article page, so a large loop or a burst of parallel work can trigger the limit even when every input URL is valid.
The package documentation exposes an interval delay and an optional HTTP, HTTPS, or SOCKS5 proxy. Those controls can reduce bursts or move traffic to an approved network path, but neither guarantees that Google will stop returning 429. Google controls the endpoint and can change its thresholds or behavior.
#1 Best Overall
- Submit a Python list instead of calling the decoder once per URL in a tight loop.
- Set an interval between article-page fetches for large jobs.
- Retry 429 results with a bounded backoff, while preserving the original input URL.
- Do not classify a 429 as a permanent “bad URL” error.
- Move to a hosted batch service if maintaining pacing, retries, and network capacity is more expensive than the per-link fee.
A 429 is therefore a capacity or pacing signal. It is different from a result such as not_google_news_link, which indicates that the input does not match a supported Google News form.
How does googlenewsdecoder turn a Google News link into the publisher URL?
Google News RSS items use encoded redirect links rather than exposing the publisher URL directly. The package documentation summarizes this as: “Google News wraps every story in an encoded link.”
- It accepts supported forms such as
news.google.com/read/,news.google.com/articles/, andnews.google.com/rss/articles/. - It fetches the Google News article page and extracts parameters needed for decoding.
- It posts those parameters to Google’s internal
batchexecuteendpoint. - It parses the response and returns a structured object containing a
decoded_urlon success or a failure message when decoding did not complete.
The batchexecute endpoint is an implementation detail, not a stable public API. Keep the decoder behind a small adapter in your application so an endpoint or response-format change is isolated to one module.
Recommended Free Tools
How do I decode one Google News RSS link in Python?
Install the package and pass a supported Google News URL to gnewsdecoder(). Check the returned object before using the URL; a failed result should be logged with the input rather than treated as a valid publisher address.
Install a compatible dependency set
python -m pip install googlenewsdecoder "selectolax<1.0"
The version constraint matters for the current 0.2.1 package because selectolax 1.0.0 removed an older parser module that the package imports. Pin the working versions in your requirements file or lockfile instead of relying on an unbounded install.
Decode and validate the result
from googlenewsdecoder import gnewsdecoder
news_url = "https://news.google.com/rss/articles/EXAMPLE"
result = gnewsdecoder(news_url)
if isinstance(result, dict) and result.get("decoded_url"):
publisher_url = result["decoded_url"]
print(publisher_url)
else:
print({"input_url": news_url, "result": result})
Use the exact result shape exposed by the version you have installed. Successful results expose decoded_url; unsuccessful results carry a message or status that should remain visible to your logging and retry logic.
Can I decode a list of Google News links in one API call?
Yes, pass a list to the documented implementation. It still obtains per-article parameters by fetching each article page, but it shares one Google batchexecute POST across the batch. That is more efficient than independently running the complete decode flow for every URL.
from googlenewsdecoder import gnewsdecoder
inputs = [
"https://news.google.com/read/EXAMPLE_ONE",
"https://news.google.com/articles/EXAMPLE_TWO",
"https://news.google.com/rss/articles/EXAMPLE_THREE",
]
results = gnewsdecoder(inputs, interval=1)
for original, result in zip(inputs, results):
if isinstance(result, dict) and result.get("decoded_url"):
print(original, "->", result["decoded_url"])
else:
print(original, "->", result)
The exact list-result container can vary by package release, so inspect one returned value in your pinned environment before building downstream parsing around it. Always retain the original URL beside its result; this makes retries, deduplication, and auditing possible when a batch contains mixed successes and failures.
How should I pace requests and retry 429 responses?
Use a conservative interval for article-page fetches, avoid unbounded concurrency, and retry only a limited number of times. A retry should preserve the input URL and include the attempt number, timestamp, and returned message.
A practical bounded-retry pattern
import time
from googlenewsdecoder import gnewsdecoder
def decode_with_retries(url, attempts=3, interval=1):
last_result = None
for attempt in range(1, attempts + 1):
last_result = gnewsdecoder(url, interval=interval)
text = str(last_result).lower()
if "429" not in text and not (isinstance(last_result, dict) and
last_result.get("status") == "not_decoded"):
return last_result
if attempt < attempts:
time.sleep(interval * (2 ** (attempt - 1)))
return last_result
Treat this as an integration pattern, not a promise that every package release uses the same status field. Prefer the library’s documented status or message when available, and cap the total retry window so a stalled job cannot run indefinitely.
Rank #3
When is a proxy appropriate?
The package accepts HTTP, HTTPS, and SOCKS5 proxy settings for workloads that need a different egress path. Use a proxy only when you are authorized to send the traffic through it, and monitor each proxy separately. A proxy can distribute traffic, but it does not remove Google’s rate limits or make aggressive concurrency safe.
Why did googlenewsdecoder fail immediately after a fresh install?
The reported compatibility problem is between googlenewsdecoder 0.2.1 and selectolax 1.0.0. The newer selectolax release removed the parser module imported by the decoder, so the failure occurs during import before any URL is processed.
Workaround
- Remove the incompatible selectolax installation if your environment already resolved it.
- Install the decoder with
selectolax<1.0. - Record both versions in your lockfile.
- Run a smoke test with one known Google News URL before launching a batch.
python -m pip uninstall -y selectolax
python -m pip install googlenewsdecoder "selectolax<1.0"
python -c "from googlenewsdecoder import gnewsdecoder; print('import ok')"
Dependency behavior is volatile. Re-run the smoke test after upgrading Python, the decoder, or selectolax, and keep the compatibility constraint explicit until the package adopts a parser API compatible with selectolax 1.0 or later.
What should a production batch pipeline record?
A decoder result is useful only when you can explain what happened to every input. Store the original link, decoded URL if present, status or message, attempt count, and processing time.
- Input: the exact Google News URL received from the feed or queue.
- Outcome: decoded publisher URL, retryable rate-limit result, unsupported-link result, or another failure message.
- Timing: start time, completion time, and delay used between attempts.
- Versioning: Python,
googlenewsdecoder, and selectolax versions. - Deduplication: a stable key for repeated links so the same story is not decoded unnecessarily.
Do not assume that a decoded URL is article content. The decoder returns the publisher address; fetching, parsing, authentication, paywalls, robots rules, and text extraction are separate operations.
PC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchShould I use a local decoder or a hosted Google News URL decoder?
Local execution gives you source-level control and avoids a per-link service bill, while a hosted actor shifts pacing, retries, feed handling, and infrastructure to a provider. The better choice depends on whether operational control or maintenance simplicity is your priority.
| Consideration | Local googlenewsdecoder |
Hosted actor |
|---|---|---|
| Control | Run and adapt the open-source code in your own environment. | Use the provider’s interface and actor release cycle. |
| Rate-limit handling | Configure interval, proxy, and bounded retries yourself. | Provider-managed pacing and retry statuses. |
| Batch behavior | Pass a list and share one batchexecute POST after per-link parameter fetches. |
Submit article links or RSS feeds; repeated links can be deduplicated. |
| Operational cost | Compute, proxy, monitoring, and maintenance costs are yours. | Usage-based charge; the cited 2026 figures are $0.80 per 1,000 decoded links on the free plan and $0.60 per 1,000 on the Business plan. |
| Failure visibility | Inspect local result objects and your own logs. | Structured rows such as not_decoded: Google rate-limited, retry later and not_google_news_link. |
The quoted hosted prices and limits are provider-specific 2026 figures and can change, so verify current pricing before budgeting. Neither approach retrieves the publisher’s article text.
When does a hosted service make sense?
A hosted Google News API and URL decoder is useful when local requests repeatedly hit 429, when you need to process complete RSS feeds, or when centralized retries and deduplication matter more than keeping every request in your own infrastructure. The documented actor accepts Google News article links and RSS feed URLs and returns publisher URL and domain fields.
Hosted responses can make queue processing simpler because a row can explicitly say that Google rate-limited the request and that it should be retried later. This is operationally clearer than parsing free-form local logs, but it introduces provider availability, data-transfer, and usage-cost dependencies.
Quick wins for a faster PC:
Repair Windows errors before they cause bigger problemsFix Now →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Clear out junk files and repair common Windows errorsFree Scan →How do I troubleshoot common decoding failures?
| Symptom | Likely cause | Action |
|---|---|---|
| 429 or “rate limited” | Burst of article-page requests or an overused egress IP. | Use list input, increase the interval, reduce concurrency, and retry with a cap. |
| Import error mentioning a selectolax parser module | selectolax 1.0.0 is installed with decoder 0.2.1. | Install and pin selectolax<1.0, then run an import smoke test. |
not_google_news_link |
The value is not a supported Google News article form. | Validate that it uses a news.google.com/read/, /articles/, or /rss/articles/ path. |
| Failure after a successful earlier run | Google changed an internal response, or the request pattern was throttled. | Inspect the stored message, slow the batch, and isolate the decoder behind an adapter for updates. |
| Decoded URL is present but no story text | URL decoding is being confused with content extraction. | Hand the publisher URL to a separate, policy-compliant fetch and extraction stage. |
What should I test before upgrading?
Keep a tiny fixture set containing one URL for each supported path and one deliberately invalid value. Run it in a clean environment after dependency changes, and verify both successful decoded_url values and readable failure messages. Do not use download counts as a quality benchmark: the package was reported at 265,000 downloads in the month ending October 11, 2026, which is only a usage signal.
Best Value
- Used Book in Good Condition
No comparative speed or success-rate benchmark is established for this decoder, so choose an implementation based on control, failure visibility, pacing requirements, and cost rather than an unverified performance claim.
Frequently Asked Questions
Can I decode Google News links without downloading the publisher article?
Yes. Decoding resolves the Google redirect to a publisher URL and stops there. Any later article download, HTML parsing, login handling, or paywall decision must be implemented separately and may be subject to the publisher’s rules.
What does a decoded URL look like when the same story appears in several feeds?
Different Google News redirect links can resolve to the same publisher address. Normalize and deduplicate the decoded URLs in your downstream queue, while retaining every original input for traceability.
Does a proxy make 429 errors disappear?
No. A proxy changes the network path, but Google can rate-limit that address as well. Use it with conservative pacing and bounded retries, and monitor whether the new path actually improves completion rates.
How can I tell whether a failure is permanent?
An unsupported-link status such as not_google_news_link is generally a validation problem, whereas a 429 or “retry later” message is transient by design. Persist the status text so your retry worker can distinguish those cases instead of retrying everything.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

