China Tech and AI News Monitor with RSS Feeds
Pricing
from $0.70 / 1,000 articles
China Tech and AI News Monitor with RSS Feeds
Monitor Chinese tech and AI RSS or Atom feeds with deduplication, topic filters and dated excerpts. Optional summaries use only your own API key.
Pricing
from $0.70 / 1,000 articles
Rating
0.0
(0)
Developer
Tim Zinin
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Monitor China tech and AI news from buyer-supplied RSS or Atom feeds. Export deduplicated headlines, dates, sources, categories, topic matches and bounded feed excerpts; optional summaries use only your own API key.
Evidence status: private build 0.1.3 accepted on 2026-09-06. Every input/output example below is an exact Dataset record from accepted runs on Apify's network with the pay-per-event tariff active. The listing is not public yet; no scheduled task or review history is claimed.
What you get
- Namespace-aware RSS and Atom parsing with CDATA support
- Conservative URL/title deduplication and sourceFeeds provenance
- Time windows, explicit keywords and four dictionary topics
- Optional bounded title/summary transformation with a buyer key only
- Runs on Apify: schedule it, monitor it, call it through the platform API, and export the dataset as JSON, CSV or Excel.

Feeds support UTF-8, UTF-16 with a BOM, GBK, GB2312, GB18030 and Big5 through the built-in Node 20 TextDecoder (full ICU), without extra codec dependencies. Encoding is selected in this order: BOM, charset in Content-Type, encoding in an XML declaration within the first 1024 bytes, then UTF-8. Unknown or unsupported labels produce a free source row with error invalid_feed_encoding; that feed produces no paid articles or seen-state entries. Malformed bytes in a supported encoding use replacement characters (fatal=false); byte caps still apply before decoding.
How to run it
- Open the actor input form and review the supplied prefill.
- Replace the scope with sources you are authorized to process, or use the reviewed prefill for a first check.
- Set a small result limit and an appropriate run budget.
- Start the run, then inspect both the dataset and the OUTPUT record.
- Filter complete rows before connecting an export or unattended schedule.
Pricing
Active tariff on the private build: $0.005 per run start + $0.001 per complete feed article through the result-found event.
For 100 complete payable units, the planned event total is $0.105, including one start. Free absence, source errors, incomplete requested work and notices do not add a result event. A run-start event can still apply even when every result row is free.
Optional summaries incur your BYOK provider charges separately. The platform key is never used. The actor result price does not include or guarantee your external provider tariff, and a provider may bill an unsuccessful or discarded completion.
Input
This is the schema prefill used for the key-free daily run contract. Optional secrets have no prefill. Array lengths and structural limits are checked again in the runtime before source work.
{"feeds": ["https://www.qbitai.com/feed","https://www.ithome.com/rss/"],"keywords": [],"topics": [],"sinceHours": 24,"maxItems": 10,"onlyNew": false,"stateStoreName": "china-tech-news","summarize": false,"summaryLanguage": "en","baseUrl": "https://openrouter.ai/api/v1","model": "deepseek/deepseek-v4-flash"}
| Field | Meaning |
|---|---|
feeds | HTTPS RSS or Atom feeds. Up to 30 buyer-authorized feed URLs, 200 parsed entries per feed. Article links stay inert. |
keywords | Keyword terms. Match title and excerpt case insensitively; at most 30 terms of 80 characters. Empty means no keyword filter. |
topics | Topic names. Runtime accepts LLM, agents, chips and EV only. Empty means no topic filter. |
sinceHours | Lookback hours. Valid old dates are excluded; invalid or future dates remain null with a warning. |
maxItems | Maximum articles. At most 500 dataset rows including free diagnostics; a cap notice may reserve one row. |
onlyNew | Only unseen articles. Enable for monitoring; prefill false returns the current feed window on every daily test. |
stateStoreName | Buyer key-value store name. Only confirmed complete deliveries become seen; serialize matching schedules. |
summarize | Summarize feed excerpts using BYOK. Default false. True requires apiKey; the platform key is never used. |
summaryLanguage | Summary language code. For compatibility titleEn/summaryEn contain the requested language, identified by summaryLanguage. |
apiKey | Buyer API key. Optional secret, required only with summarize=true. Never copied to rows, logs or state. |
baseUrl | OpenAI-compatible API base URL. HTTPS only from the documented provider allowlist; redirects refused. |
model | Provider model ID. Supply an ID valid at your selected BYOK endpoint; no live provider calls are made during build. |
Output
The record below is exact. Run GoicyLfUh286rlzld on build 0.1.3, 2026-09-06, 9 s, Dataset records: 2, charged events: {"apify-actor-start": 1, "result-found": 1}. 1 paid record(s). Input: {"feeds": ["https://www.qbitai.com/feed"], "summarize": false, "onlyNew": false, "maxItems": 1, "sinceHours": 24, "stateStoreName": "china-tech-news", "summaryL.
{"schemaVersion": "1.0","type": "article","sourceUrl": "https://www.qbitai.com/feed","found": true,"status": "found","resultCount": 1,"partial": false,"error": "","warnings": [],"checkedAt": "2026-09-06T07:01:44.777Z","evidence": {"kind": "feed_metadata","feedUrl": "https://www.qbitai.com/feed"},"confidence": "source_metadata","action": "review","categories": ["资讯","哔哩哔哩"],"title": "B站首届AI创造公开赛收官,超八成参赛者为一人团队","url": "https://www.qbitai.com/2026/09/484890.html","author": "量子位的朋友们","excerpt": "","publishedAt": "2026-09-06T04:40:15.000Z","canonicalUrl": "https://www.qbitai.com/2026/09/484890.html","articleId": "ea1e75c9e35f97758ed30d68b96f06bf7ec3583cb3b253f8072d85b5a9331188","matchedKeywords": [],"topics": [],"feedUrl": "https://www.qbitai.com/feed","sourceFeeds": ["https://www.qbitai.com/feed"],"titleEn": null,"summaryEn": null,"summaryLanguage": "en","isNew": false,"summaryStatus": "disabled","baselineReset": false}
Other tools we built
Feed boundaries and source rights
The news monitor reads the buyer's RSS or Atom URL and the corresponding robots file. It never opens the article URL. It uses feed metadata and a bounded excerpt already present in the feed, so a link to a restricted social platform remains an inert string in the result. Adding a feed does not create permission to crawl every website linked from it.
The reviewed source inventory includes QbitAI, ITHome, GeekPark, Ifanr, Leiphone, TMTPost, cnBeta, Solidot, OSChina, SSPAI and SegmentFault. The compact prefill uses QbitAI and ITHome. Other buyer-supplied feeds must still use HTTPS, a public host and an allowed source path. No feed host is assumed to have a stable publication rate or to contain a story within every lookback window.
Robots is checked for the exact feed path and query. A missing 404 robots file is known absence under the actor's access policy; it is not presented as an explicit Allow statement from the publisher. A robots timeout, HTML challenge or source denial stops that feed. The article pages are not a fallback when the feed path is unavailable.
A publisher may provide a large HTML fragment in a feed. The actor removes script, style and other non-text content, normalizes whitespace, and keeps at most one thousand characters as excerpt. It does not preserve an entire article merely because a feed happened to carry one. The supplied title is bounded separately. Feed syndication and robots rules are technical observations, not a general republication license.
RSS, Atom and publication dates
RSS item and Atom entry formats are both supported. Namespace-aware parsing handles Atom defaults and RSS namespaced author fields such as dc:creator. CDATA is treated as text and sanitized for the output excerpt. XML DTDs and external entities are rejected, so a feed cannot request a second document or expand an attacker-defined entity through the parser.
A feed is limited to two hundred materialized entries. The parser still validates the bounded XML document, but entries beyond the per-feed cap are not accumulated into unbounded arrays. A truncation warning identifies that coverage limit. With thirty feeds, no more than six thousand feed entries become parsed candidate records before deduplication and filtering.
Publication dates come from the feed. Valid dates older than sinceHours are excluded. A missing, invalid or future date stays null and carries a warning. The actor does not replace it with checkedAt to make the story appear new. Undated candidates can still be returned with their warning, so downstream consumers must decide whether their own use case requires a trustworthy publication date.
A source timezone offset is converted into an ISO UTC timestamp when the feed supplies a valid date. The resulting ISO string is suitable for chronological storage. It does not establish the original publication's local editorial day unless you also retain or infer that timezone through a separate, justified process. The monitor does not invent a timezone for a malformed date.
Deduplication, keywords and topics
Canonical URLs remove fragments and common tracking parameters, including utm parameters and common campaign identifiers. Remaining query parameters are sorted. This makes repeated feed links with different campaign tags comparable while preserving parameters that may identify different articles. Canonicalization produces an output string; it never causes a request to the article.
Duplicate canonical URLs are merged and the result retains sourceFeeds. A sufficiently long normalized title can also merge repeated syndication across feed URLs. Short generic headlines are deliberately conservative: two different URLs titled “AI news” are not automatically merged. A title match is a deduplication heuristic, not proof that two publishers share authorship or licensing.
Keywords are matched case-insensitively against title and excerpt. Empty keywords mean no keyword filter. Topics use a small explicit term dictionary for LLM, agents, chips and EV. The topic list is a convenience filter for a feed monitor; it is not a trained classifier or a claim that every relevant Chinese synonym is covered. Extend your keyword list when an editorial term matters to your workflow.
When both keywords and topics are selected, a candidate must match the chosen keyword condition and at least one selected topic. matchedKeywords reports which buyer terms matched, and topics reports the dictionary topics that were observed. These fields let you review why a row survived instead of relying on an opaque relevance score.
Optional summaries: buyer key only
summarize:false is the default. Complete RSS metadata is payable without an LLM request. When summarize is true, the buyer must supply apiKey. The platform key is never used, even if a platform environment happens to contain one. A missing buyer key returns one honest free error row before feed or provider work, with a hint to set apiKey.
The BYOK client is an actor-local adaptation of the accepted B1 OpenAI-compatible client. It is not a dependency on the shared cn-llm library. The provider allowlist covers OpenRouter, DeepSeek, Moonshot, Z.ai, DashScope, Volcengine and MiniMax API endpoints as listed in the detailed reference. The buyer chooses a model ID valid for the selected endpoint and bears any upstream provider charges independently of the actor's result event.
Only title and the sanitized feed excerpt are sent for a requested summary. The system instruction treats source text as untrusted data and asks for a small JSON object containing a translated title and summary. The client does not browse article links, invoke a web-search plugin for this task or give a source fragment authority to change the request's purpose.
A complete requested summary must contain nonempty bounded title and summary strings in valid JSON and a successful completion status. A refusal, truncated completion, provider error, invalid envelope or malformed summary produces a free partial article row. The RSS fields can remain in that row as evidence, but a failed requested summary is not silently billed as if summarize had been false.
Ifanr summaries are held regardless of key availability until a clear basis for that LLM use is accepted. A row syndicated through an Ifanr feed retains that source in sourceFeeds, and the hold applies to that merged row as well. The actor can still return a full metadata result from Ifanr when summarize is false; the policy for optional transformation is distinct from the permitted feed metadata surface.
The compatibility fields are named titleEn and summaryEn. If summaryLanguage is changed from en, those fields contain the requested language and summaryLanguage labels it explicitly. Consumers should use that language field rather than assuming English from the historical column name. When summarization is disabled, the fields are null and summaryStatus is disabled.
Monitoring state and output capacity
The general monitoring default is onlyNew:true. The supplied daily prefill explicitly sets it to false. Enable onlyNew for a persistent monitoring schedule. The daily prefill uses onlyNew:false so repeated platform checks return the current window rather than suppressing it through a shared state store. An article becomes seen only after its complete row has been confirmed delivered. Source or summary failures do not mark it seen and can therefore be retried in a later comparable run.
The state key includes the normalized feed selection and processing settings but never stores the API key. A change of feeds, filters, language, model, summary mode, window or output cap starts a distinct comparison lineage. Keeping a stable task configuration gives the clearest onlyNew behavior. Serialize runs that share a lineage; the store is not a concurrent exactly-once queue.
The output ceiling is five hundred total dataset rows, including source failures and free notices. maxItems is also an article ceiling. A cap notice can reserve one slot when more work is known to remain. Therefore a request for five hundred articles can deliver fewer than five hundred payable rows when diagnostics need space. OUTPUT preserves the count of measurable omitted candidates.
A failed feed does not cancel complete rows from surviving feeds. Each completed article receives its own result event. If all sources fail, the dataset contains errors rather than a fabricated no_updates claim. If every source succeeds but the time window, filters or onlyNew state remove all candidates, a free no_updates row explains the empty selection.
Field reference
Every field in the overview view is listed here, including diagnostic and notice fields that may be absent from a complete domain row. A missing optional domain field after pre-work validation means no corresponding source observation was made.
articleId
Hash-derived identity for the canonical feed article. It links onlyNew state and repeated complete deliveries; it is not an upstream publisher-issued universal identifier.
title
Sanitized bounded headline from the feed. It may be Chinese or another source language. A provider-produced translated title belongs in the separate compatibility field.
url
Inert canonical article link supplied by feed metadata. The actor never fetches this URL, even when it points to a prohibited social or news platform.
canonicalUrl
Normalized article URL with tracking parameters and fragments removed and remaining query parameters sorted. It is a comparison string, not a verified redirect destination.
feedUrl
The feed that supplied the selected parent observation. After deduplication, sourceFeeds retains all merged feed URLs so source provenance is not lost.
sourceFeeds
Distinct feed URLs contributing the deduplicated article. This array supports provenance and summary-source policy checks; its members are bounded by the input feed count.
author
Feed author text when available, including supported namespace fields. It is not an identity verification or proof that the named person controls the feed.
publishedAt
Nullable source publication date in UTC. Invalid, missing and future values remain null with a warning; checkedAt is never substituted into this column.
categories
At most one hundred sanitized feed category strings. These are publisher metadata and remain distinct from the actor's small derived topic dictionary.
matchedKeywords
Buyer-supplied terms found in title or excerpt. Use it to explain a keyword filter decision without claiming that the article body was searched.
topics
Derived dictionary matches among LLM, agents, chips and EV. Empty means no dictionary topic matched, not that the story has no subject matter.
excerpt
At most one thousand characters of sanitized feed text. It is not a full article crawl, and it is the only body-like material passed to an optional summary request.
titleEn
Nullable compatibility field for the requested translated title. Check summaryLanguage because a non-English request intentionally keeps the historical column name.
summaryEn
Nullable compatibility field for a complete requested summary. A partial or failed summary must not be promoted into a complete result merely because this field is nonempty.
summaryLanguage
Requested language code for optional transformation. It labels the compatibility summary fields and does not imply that the source feed itself used that language.
isNew
Comparison flag with actor-specific meaning. Model first baselines use null; news uses absence from successfully delivered seen-state. Read the state section before interpreting it.
summaryStatus
Disabled, complete, failed, missing_key or blocked_source_policy as applicable. Read it with found and partial to distinguish a complete feed-only row from failed requested work.
baselineReset
Signals structurally damaged prior state. A failed state read is a separate fatal error, never silently represented as an empty successful baseline.
feedCount
Number of selected feeds reported on a no_updates diagnostic. It describes scope, not an assertion that each feed has a permanent or predictable publishing schedule.
parsedItems
Number of materialized RSS/Atom candidates, at most two hundred per feed. It precedes filtering and deduplication and therefore differs from article and result-event counts.
filtered
Count of candidates excluded by the applicable selection stage. It is not a count of source failures or deleted upstream objects.
sinceHours
Lookback window echoed for an empty news selection. A clean absence inside a narrow window is different from source timeout or invalid XML.
unprocessed
Known units left unfinished under the run contract. It does not invent an exact count for source pages the actor never fetched. Read cap warnings for an uncounted tail.
schemaVersion
Stable row-contract version. Use it when validating a downstream parser; a version label alone does not establish cloud acceptance or a live pricing configuration.
type
Row category such as model, article, audit, contacts, source or notice. Filter by type together with found and partial to keep diagnostic records out of business-result tables.
sourceUrl
Primary source surface for the observation. It points to permitted API/feed/robots/HTML evidence and is not an instruction to crawl additional linked resources.
found
True only for a complete payable unit. False covers both clean absence and partial failure, so combine it with status, error and partial instead of using it alone.
status
Domain-specific classification such as found, no_updates, no_contacts, no_data or partial. It conveys a more useful outcome than the platform run status alone.
resultCount
One on complete payable rows and zero on free rows. It counts this actor's billing unit, not nested objects, HTTP requests, tokens or discovered links.
partial
True when the row or run contract is incomplete. Useful partial evidence can remain in the dataset, but it is delivered without the result-found event.
error
Stable nonempty reason for a failed requested observation. Empty string is reserved for rows without a recorded error; it is never used to disguise unavailable sources.
warnings
Bounded interpretation or coverage notices. A warning does not automatically mean partial, so read the relevant domain contract and explicit partial flag.
checkedAt
UTC observation assembly time. It is distinct from source publication, creation or modification dates and should not replace unknown source timestamps.
evidence
Nested provenance describing the permitted source surface and minimal supporting fields or URLs. Retain it for review; it is not a permission certificate.
confidence
Categorical evidence description, not a calibrated probability. source_metadata indicates the source contract was assembled, not that every downstream interpretation is correct.
action
A small operational hint such as review or set_apiKey. It is descriptive output and never executes a browser action, sends a message or changes an external application.
Configuration cookbook
These are configuration examples, not additional source captures. Each example starts from the exact prefill and changes the shown scope. The stated result contract describes how to assess a run; it does not promise a currently available source result.
Read the current reviewed window
The prefill uses two reviewed Chinese feeds, a twenty-four-hour window and no summaries. It is designed to return current feed metadata repeatedly without an API key.
{"feeds": ["https://www.qbitai.com/feed","https://www.ithome.com/rss/"],"keywords": [],"topics": [],"sinceHours": 24,"maxItems": 10,"onlyNew": false,"stateStoreName": "china-tech-news","summarize": false,"summaryLanguage": "en","baseUrl": "https://openrouter.ai/api/v1","model": "deepseek/deepseek-v4-flash"}
Inspect sourceFeeds, publishedAt, warnings and excerpt. The article URL should remain a string in the dataset and never appear as a requested source page.
Budget reference for this configuration: at most 10 payable units under the result limit, or $0.015 in planned start-plus-result events if that many complete units are delivered. This is a ceiling calculation for the configured limit, not a forecast of source yield.
Enable persistent only-new monitoring
Enable this for an actual monitoring schedule after inspecting the first complete output. Delivered complete article IDs become seen for the exact normalized selection.
{"feeds": ["https://www.qbitai.com/feed","https://www.ithome.com/rss/"],"keywords": [],"topics": [],"sinceHours": 24,"maxItems": 10,"onlyNew": true,"stateStoreName": "china-tech-news","summarize": false,"summaryLanguage": "en","baseUrl": "https://openrouter.ai/api/v1","model": "deepseek/deepseek-v4-flash"}
Keep schedules serialized and settings stable. A failed requested summary does not mark an article seen, so it can appear again for a justified retry.
Budget reference for this configuration: at most 10 payable units under the result limit, or $0.015 in planned start-plus-result events if that many complete units are delivered. This is a ceiling calculation for the configured limit, not a forecast of source yield.
Filter by Chinese and English keywords
The case-insensitive filter reads title and excerpt only. It does not browse an article to find a keyword missing from the feed.
{"feeds": ["https://www.qbitai.com/feed","https://www.ithome.com/rss/"],"keywords": ["大模型","DeepSeek"],"topics": [],"sinceHours": 24,"maxItems": 10,"onlyNew": false,"stateStoreName": "china-tech-news","summarize": false,"summaryLanguage": "en","baseUrl": "https://openrouter.ai/api/v1","model": "deepseek/deepseek-v4-flash"}
Use matchedKeywords to understand why each row survived. An empty result can be a clean filter outcome rather than an availability incident.
Budget reference for this configuration: at most 10 payable units under the result limit, or $0.015 in planned start-plus-result events if that many complete units are delivered. This is a ceiling calculation for the configured limit, not a forecast of source yield.
Follow chip-related coverage
The small topic dictionary includes explicit chip-related Chinese and English terms. It is a transparent editorial filter, not a broad semantic classifier.
{"feeds": ["https://www.qbitai.com/feed","https://www.ithome.com/rss/"],"keywords": [],"topics": ["chips"],"sinceHours": 24,"maxItems": 10,"onlyNew": false,"stateStoreName": "china-tech-news","summarize": false,"summaryLanguage": "en","baseUrl": "https://openrouter.ai/api/v1","model": "deepseek/deepseek-v4-flash"}
Review both the title and the matched topic. Add keyword terms if an important product name is absent from the dictionary.
Budget reference for this configuration: at most 10 payable units under the result limit, or $0.015 in planned start-plus-result events if that many complete units are delivered. This is a ceiling calculation for the configured limit, not a forecast of source yield.
Combine a topic and a keyword
Both chosen conditions apply. This produces a narrower queue than a broad topic selection and can validly be empty even when the source contains many articles.
{"feeds": ["https://www.qbitai.com/feed","https://www.ithome.com/rss/"],"keywords": ["Qwen"],"topics": ["LLM"],"sinceHours": 24,"maxItems": 10,"onlyNew": false,"stateStoreName": "china-tech-news","summarize": false,"summaryLanguage": "en","baseUrl": "https://openrouter.ai/api/v1","model": "deepseek/deepseek-v4-flash"}
Do not tell downstream users that all LLM stories were covered. Retain the input filters beside the export or schedule description.
Budget reference for this configuration: at most 10 payable units under the result limit, or $0.015 in planned start-plus-result events if that many complete units are delivered. This is a ceiling calculation for the configured limit, not a forecast of source yield.
Use a one-hour alerting window
A quiet feed can produce no_updates in a narrow window. Dates that are invalid or in the future remain null with warnings instead of being changed to the run time.
{"feeds": ["https://www.qbitai.com/feed","https://www.ithome.com/rss/"],"keywords": [],"topics": [],"sinceHours": 1,"maxItems": 10,"onlyNew": false,"stateStoreName": "china-tech-news","summarize": false,"summaryLanguage": "en","baseUrl": "https://openrouter.ai/api/v1","model": "deepseek/deepseek-v4-flash"}
Decide whether your alerting system accepts undated rows. The actor preserves uncertainty so that your own policy can make that decision.
Budget reference for this configuration: at most 10 payable units under the result limit, or $0.015 in planned start-plus-result events if that many complete units are delivered. This is a ceiling calculation for the configured limit, not a forecast of source yield.
Review a week of feed entries
The window expands, but each feed still contributes at most two hundred materialized entries. A feed itself may expose much less than a week of history.
{"feeds": ["https://www.qbitai.com/feed","https://www.ithome.com/rss/"],"keywords": [],"topics": [],"sinceHours": 168,"maxItems": 100,"onlyNew": false,"stateStoreName": "china-tech-news","summarize": false,"summaryLanguage": "en","baseUrl": "https://openrouter.ai/api/v1","model": "deepseek/deepseek-v4-flash"}
Avoid claiming historical completeness from a current RSS endpoint. The returned set is the currently exposed bounded feed, filtered by its dates.
Budget reference for this configuration: at most 100 payable units under the result limit, or $0.105 in planned start-plus-result events if that many complete units are delivered. This is a ceiling calculation for the configured limit, not a forecast of source yield.
Request a buyer-funded English summary
This example shows the shape of a secret input, not a working credential. Replace the placeholder privately in the secret form field. No platform key is used.
{"feeds": ["https://www.qbitai.com/feed","https://www.ithome.com/rss/"],"keywords": [],"topics": [],"sinceHours": 24,"maxItems": 10,"onlyNew": false,"stateStoreName": "china-tech-news","summarize": true,"summaryLanguage": "en","baseUrl": "https://openrouter.ai/api/v1","model": "deepseek/deepseek-v4-flash","apiKey": "BUYER_KEY_REPLACE_LOCALLY"}
The complete article requires valid summary JSON. Provider errors return a free partial result; upstream provider usage may still have its own charges.
Budget reference for this configuration: at most 10 payable units under the result limit, or $0.015 in planned start-plus-result events if that many complete units are delivered. This is a ceiling calculation for the configured limit, not a forecast of source yield. Your external BYOK provider usage is additional and is not included in that event calculation.
Translate into another requested language
The summaryLanguage value controls the requested title and summary language. Historical compatibility field names titleEn and summaryEn remain stable.
{"feeds": ["https://www.qbitai.com/feed","https://www.ithome.com/rss/"],"keywords": [],"topics": [],"sinceHours": 24,"maxItems": 10,"onlyNew": false,"stateStoreName": "china-tech-news","summarize": true,"summaryLanguage": "zh","baseUrl": "https://openrouter.ai/api/v1","model": "deepseek/deepseek-v4-flash","apiKey": "BUYER_KEY_REPLACE_LOCALLY"}
Read summaryLanguage before presenting those fields. If a provider produces invalid JSON or an incomplete completion, the requested row remains partial.
Budget reference for this configuration: at most 10 payable units under the result limit, or $0.015 in planned start-plus-result events if that many complete units are delivered. This is a ceiling calculation for the configured limit, not a forecast of source yield. Your external BYOK provider usage is additional and is not included in that event calculation.
Test missing-key behavior explicitly
Without apiKey, the actor returns an honest free missing-key row before source or provider work. A platform environment key does not change that decision.
{"feeds": ["https://www.qbitai.com/feed","https://www.ithome.com/rss/"],"keywords": [],"topics": [],"sinceHours": 24,"maxItems": 10,"onlyNew": false,"stateStoreName": "china-tech-news","summarize": true,"summaryLanguage": "en","baseUrl": "https://openrouter.ai/api/v1","model": "deepseek/deepseek-v4-flash"}
Use this to verify a configuration-error path. It does not prove the BYOK provider works and does not count as a happy summary acceptance.
Budget reference for this configuration: at most 10 payable units under the result limit, or $0.015 in planned start-plus-result events if that many complete units are delivered. This is a ceiling calculation for the configured limit, not a forecast of source yield. Your external BYOK provider usage is additional and is not included in that event calculation.
Limit a source review to one article
This makes it easy to inspect canonicalization, publication date and excerpt before expanding a schedule. The feed can still contain many candidate entries.
{"feeds": ["https://www.qbitai.com/feed"],"keywords": [],"topics": [],"sinceHours": 24,"maxItems": 1,"onlyNew": false,"stateStoreName": "china-tech-news","summarize": false,"summaryLanguage": "en","baseUrl": "https://openrouter.ai/api/v1","model": "deepseek/deepseek-v4-flash"}
A free cap notice can identify remaining selected work. The result event counts articles, not feed requests or parser entries.
Budget reference for this configuration: at most 1 payable units under the result limit, or $0.006 in planned start-plus-result events if that many complete units are delivered. This is a ceiling calculation for the configured limit, not a forecast of source yield.
Exercise a clean empty feed scope
An empty array is an explicit no-source request and a deterministic no_updates case. It is separate from a feed that was attempted but failed.
{"feeds": [],"keywords": [],"topics": [],"sinceHours": 24,"maxItems": 10,"onlyNew": false,"stateStoreName": "china-tech-news","summarize": false,"summaryLanguage": "en","baseUrl": "https://openrouter.ai/api/v1","model": "deepseek/deepseek-v4-flash"}
The diagnostic row has found false, resultCount zero and no source error. Keep an independent fixture for the unavailable-source case as well.
Budget reference for this configuration: at most 10 payable units under the result limit, or $0.015 in planned start-plus-result events if that many complete units are delivered. This is a ceiling calculation for the configured limit, not a forecast of source yield.

Recorded platform runs (accepted acceptance runs)
The records below are exact; only checkedAt differs between repeated runs.
Happy path
Run GoicyLfUh286rlzld on build 0.1.3, 2026-09-06, 9 s, Dataset records: 2, charged events: {"apify-actor-start": 1, "result-found": 1}. The exact first paid record is shown in the Output section above.
Input:
{"feeds": ["https://www.qbitai.com/feed"],"summarize": false,"onlyNew": false,"maxItems": 1,"sinceHours": 24,"stateStoreName": "china-tech-news","summaryLanguage": "en","baseUrl": "https://openrouter.ai/api/v1","model": "deepseek/deepseek-v4-flash"}
Correct empty-input record
Run KujzvIt6xPaH9bjUN on build 0.1.3, 2026-09-06, 2 s, Dataset records: 1, charged events: {"apify-actor-start": 1, "result-found": 0}.
{"schemaVersion": "1.0","type": "no_updates","sourceUrl": null,"found": false,"status": "no_updates","resultCount": 0,"partial": false,"error": "","warnings": [],"checkedAt": "2026-09-06T07:01:48.996Z","evidence": null,"confidence": null,"action": "review","feedCount": 0,"parsedItems": 0,"filtered": 0,"sinceHours": 24}
Unreachable source record
Run Bm8iqAU0019t9nQjw on build 0.1.3, 2026-09-06, 3 s, Dataset records: 1, charged events: {"apify-actor-start": 1, "result-found": 0}. The source could not be reached; the record is free and carries the reason.
{"schemaVersion": "1.0","type": "source","sourceUrl": "https://www.example.com/no-such-feed-zzq.xml","found": false,"status": "partial","resultCount": 0,"partial": true,"error": "http_404","warnings": [],"checkedAt": "2026-09-06T07:01:53.082Z","evidence": null,"confidence": null,"action": "review","feedUrl": "https://www.example.com/no-such-feed-zzq.xml"}
prefill (two feeds, ten articles)
Run l2h7MuuekoRn2d9wN on build 0.1.3, 2026-09-06, 16 s, Dataset records: 11, charged events: {"apify-actor-start": 1, "result-found": 10}. 10 paid record(s).
Input: the Store prefill with both feeds, summarize false and onlyNew false.
First paid Dataset record (exact):
{"schemaVersion": "1.0","type": "article","sourceUrl": "https://www.qbitai.com/feed","found": true,"status": "found","resultCount": 1,"partial": false,"error": "","warnings": [],"checkedAt": "2026-09-06T07:07:14.791Z","evidence": {"kind": "feed_metadata","feedUrl": "https://www.qbitai.com/feed"},"confidence": "source_metadata","action": "review","categories": ["资讯","哔哩哔哩"],"title": "B站首届AI创造公开赛收官,超八成参赛者为一人团队","url": "https://www.qbitai.com/2026/09/484890.html","author": "量子位的朋友们","excerpt": "","publishedAt": "2026-09-06T04:40:15.000Z","canonicalUrl": "https://www.qbitai.com/2026/09/484890.html","articleId": "ea1e75c9e35f97758ed30d68b96f06bf7ec3583cb3b253f8072d85b5a9331188","matchedKeywords": [],"topics": [],"feedUrl": "https://www.qbitai.com/feed","sourceFeeds": ["https://www.qbitai.com/feed"],"titleEn": null,"summaryEn": null,"summaryLanguage": "en","isNew": true,"summaryStatus": "disabled","baselineReset": false}
Reading a run before using its data
Open both the dataset and the OUTPUT record. They answer different questions. The dataset contains observations and explanations that can be inspected one row at a time. OUTPUT records how much work was requested, processed, delivered, charged, left unfinished, or affected by a failure. A nonempty dataset is not a promise that every supplied input succeeded. Keep the run identifier next to exports so that an individual row can be traced back to the run that produced it.
For business use, begin with found === true, partial === false, error === "" and resultCount === 1. Those fields form the complete-result contract. A row that has useful-looking source values but also partial:true is supporting evidence for investigation. It must not silently enter the same downstream table as a complete result. If you need a single export, keep the flags as columns and use a saved filter; do not discard the flags during CSV conversion.
An empty string in error has a specific meaning: the actor did not record an error for that row. It is different from an absent field, a null source measurement, an empty array of discoveries, and a run that stopped before it reached the source. A successful absence carries found:false, resultCount:0, and error:"". An unavailable source carries a reason and partial status. This distinction allows an alerting system to separate “nothing to report” from “the check needs attention.”
checkedAt is the time the actor assembled the observation. It does not replace the source's own date, establish when a model was marketed, establish when a journalist first published a story, or establish the age of a phone number. Preserve original source dates in their own columns. When comparing runs, use UTC timestamps or convert both sides to the same timezone before applying a business-day grouping.
confidence is a categorical description of the evidence boundary. It is not a calibrated probability. A value such as source_metadata means that a complete contract was assembled from the permitted source surface. It cannot be interpreted as a percentage likelihood of legal permission, business relevance, future reachability, caller identity, or an upstream provider's continued availability.
warnings can coexist with a complete result when the warning describes interpretation rather than a missing required observation. For example, catalog uncertainty is different from a failed robots request. Read warning values together with the actor-specific contract below. A partial row is always free of the result event, even when its content contains details that would have been useful in a successful check.
Delivery, budget and replay
The actor uses one result event, result-found, for each complete payable unit. The dataset row and result event are delivered through the SDK's atomic pushData interface. There is no separate application-level charge followed by an unrelated dataset write. Free explanation rows use the same dataset without a result event name. The platform's automatic run-start event is outside those row decisions.
Before a payable row is delivered, the actor reads the active pricing information and the buyer's remaining run budget. Paid deliveries are serialized through a mutex so that two callers cannot both spend the same remainder. The final comparison is made inside that critical section at microdollar precision. If the remainder cannot pay for the complete event, delivery stops and the remaining work is identified in OUTPUT when known.
An unknown budget is not treated as an unlimited budget. If the charging manager cannot return a valid budget, the actor logs a stable error and fails the run. It also refuses a pricing configuration that charges for automatic dataset items: that would make ordinary free diagnostics billable. Such a pricing problem may therefore yield no dataset rows; the authoritative explanation is the failed run and log, not a paid error record.
The guard checks SDK charge confirmation only when pricing is monetized. Local development with unmonetized SDK settings can return a zero charged count by design, so that signal is not interpreted as a buyer budget failure. In a monetized run, a missing or contradictory charge confirmation is uncertain delivery. The actor stops, records deliveryUncertain, and fails rather than retrying the same paid push.
A last successful row may legitimately be delivered with the event limit reached. That row is counted before the actor stops. If your budget was intended to cover exactly a small number of results, seeing that final row and a budget-exhausted flag is consistent. Compare paid counts and unprocessed counts before assuming that an extra row was charged or a result was lost.
Do not automatically replay a failed delivery. Inspect the dataset, OUTPUT and the platform charge log first. A transport failure can happen after some of the underlying operation has already happened. This build has no exactly-once ledger or cross-run transaction coordinator. replaySafe:false is deliberate: an operator needs to reconcile uncertain delivery before deciding what to repeat.
Network boundaries and operating limits
All source requests use HTTPS to public hosts. The runtime rejects credentials embedded in URLs, fragments, nonstandard ports, private or loopback addresses, cloud metadata destinations, mapped IPv6, and prohibited platform domains. It resolves the hostname before connecting, checks every returned address, and pins the connection to the addresses that passed that check. A public-looking hostname is not enough to pass the guard.
Redirects are handled manually. Each new target must pass the URL and address checks again; applicable actor-specific origin and path restrictions are also enforced. The source reader allows at most five redirect hops. An allowed first URL does not grant permission to follow an arbitrary redirect, carry a credential to a new host, or load a login page. The BYOK provider transport refuses redirects entirely.
The source reader has a twenty-second ceiling covering DNS, connection and body reading. API, feed and HTML responses are limited to 2 MiB each, robots to 512 KiB and llms to 256 KiB. The run also has a 50 MiB response-byte ceiling and a working deadline of 240 seconds inside the 300-second platform timeout. These limits are ceilings, not targets and not an assurance that a remote site will respond quickly.
Retries apply to transient network failures, HTTP 429 and server errors. Invalid JSON, bad XML, an unsuitable content type, a blocked destination, a refused redirect or a truncated body is not made trustworthy by repeating it. Retry-After is bounded by the working deadline. Every source attempt remains subject to the actor's run-wide request ceiling.
The actor treats returned text as data. It does not run page JavaScript, execute code from repositories, load image resources, submit a form, log into an account, open a messaging application or dereference a social link found in a source. XML external entities and DTDs are rejected by the feed reader. These boundaries reduce the surface of the job and keep the output tied to the advertised source surface.
Source availability can vary by geography, hosting network and time. A fixture test proves code behavior for the recorded response shape; it does not prove that every production host is reachable today. The accepted planning evidence includes separate datacenter observations. Cloud acceptance of this draft is a separate step and should be recorded with the actual run ID after the orchestrator performs it.
Troubleshooting by evidence
The run succeeded but returned an error row. A handled source problem is represented as free diagnostic data so that the daily check stays inspectable. Read partial, error, warnings and OUTPUT rather than relying on run status alone. The run is failed when the actor cannot safely reason about money or persistent state; ordinary source failures can be contained and reported without failing unrelated complete work.
A source is reachable in a browser but the actor returns partial. Inspect whether the browser used an existing session, executed JavaScript, followed a cross-origin redirect or displayed an HTML challenge. The actor uses the documented unauthenticated source surface and validates the response type. A browser screenshot of a useful page does not show that the same permitted machine-readable response was available to the actor.
Fewer paid rows appeared than the requested maximum. The maximum is a ceiling. Filtering, deduplication, absence, unknown source data, the working deadline, a source cap or a buyer budget can all reduce delivered complete rows. OUTPUT identifies measurable unprocessed work; source pagination may also leave an uncounted tail that is reported as a cap warning rather than an invented exact count.
A field contains null. Read the field's definition before substituting zero. Null preserves lack of evidence. Zero is a measurement or count and can materially alter a chart, a score or an automated decision. If your destination system cannot represent null, keep a companion status column that explains the substitution. Do not silently transform unknown observations into favorable outcomes.
A source changed its response structure. Keep the relevant source URL, run ID, actor version, status flags and a minimal redacted excerpt when opening an issue. A useful bug report explains which expected field was missing and how the row was classified. Do not include API keys, private account information or unnecessary personal contact details in a public issue.
Can the build be treated as cloud accepted? The private build named in the evidence banner passed the acceptance runs listed under Recorded platform runs; publication to the Store is a separate step.
Support and responsibility
Use the actor's issue page for a reproducible defect or a request for a new response shape. Include the input settings with secrets removed, the run ID where available, the affected field and whether the problem is complete absence, partial source failure or uncertain delivery. A short reproducible example is more useful than an unfiltered export containing unrelated data.
The buyer supplies the scope and must have an appropriate basis for processing and retaining it. Public reachability and a robots rule are different from permission to republish content or contact a person. Apply your organization's retention, access and data-protection rules, including applicable PIPL and GDPR obligations where relevant. This tool reports technical evidence within its contract; it does not issue a legal clearance.
Compact Chinese guide / 中文说明
本工具仅处理输入中指定的公开来源,输出包含完整结果、无结果和部分失败三种不同情况。请同时查看 found、partial、error 和 OUTPUT,不要把未知值 null 改成零或百分之百。完整结果按 result-found 事件计费,错误和说明行不收取结果事件费;启动费仍可能产生。
仅读取 RSS/Atom,不打开文章页面。默认不生成摘要;摘要和翻译只使用买家自己的 API key,绝不使用平台密钥。无效或未来发布时间保持 null。
Related tools
Related tools for adjacent workflows in data pipelines for AI applications, social platforms and regional directories.
| Actor | What it does |
|---|---|
| URL to Markdown Converter | Pair it in the data pipelines for AI applications workflow: Convert up to 100 authorized public HTML pages into clean Markdown for RAG, AI agents, SEO research, and... |
| Live Price Oracle | Pair it in the data pipelines for AI applications workflow: Get timestamped DexScreener market observations for up to 100 token contracts or bounded ticker searches |
| RAG Dataset Builder | Pair it in the data pipelines for AI applications workflow: Turn buyer-authorized public website sitemaps into bounded, source-linked text chunks for RAG, search,... |
| Structured Data Extractor | Pair it in the data pipelines for AI applications workflow: Extract title, meta, JSON-LD, headings, links, emails, and price observations from up to 100 authorized... |
| Telegram Export Intelligence | Pair it in the social platforms and regional directories workflow: Turn owner-authorized Telegram message exports into per-post reach context, evidence, confidence, review... |