Software Support & End-of-Life Lookup for AI Agents avatar

Software Support & End-of-Life Lookup for AI Agents

Pricing

$0.20 / 1,000 support lookups

Go to Apify Store
Software Support & End-of-Life Lookup for AI Agents

Software Support & End-of-Life Lookup for AI Agents

Software support and end-of-life lookup for explicit product/release pairs from endoflife.date. Export flat JSON lifecycle records and days to end of life for upgrade planning.

Pricing

$0.20 / 1,000 support lookups

Rating

0.0

(0)

Developer

Grit

Grit

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Fetch support-lifecycle records for explicit software product/release pairs and give upgrade-planning agents a flat JSON result with days to end of life.

The data source is the public endoflife.date API v1. The Actor requests only /products/{product}/releases/{release}; it does not discover products or enumerate releases. This is software support-lifecycle data. PyPI/npm metadata and NVD vulnerability data are outside its scope. Product descriptions, logos, contributor fields and raw source objects are excluded from result rows.

What it returns

FieldTypeMeaning
productstring/nullRequested endoflife.date slug, trimmed and lowercased; null for an invalid nonstring input
releasestring/nullExact requested release identifier as a string
releaseDatedate string/nullRelease-cycle start date
latestVersionstring/nullLatest version within this release cycle, not the newest major release across the product
latestDatedate string/nullDate of that latest version
eoasFromdate string/boolean/nullEnd of active support; missing/unknown becomes null; any source boolean is preserved
eolFromdate string/boolean/nullEnd of life; missing/unknown becomes null; any source boolean is preserved
isEoasboolean/nullSource flag for end of active support; null when absent
isEolboolean/nullSource end-of-life flag
isMaintainedboolean/nullSource maintenance flag; may include extended support
sourceGeneratedAttimestamp string/nullAPI envelope generated_at, preserved exactly; not the Actor's retrieval time
asOfdate stringExplicit planning date supplied by the caller
daysToEolinteger/nulleolFrom minus asOf in calendar days; 0 on that date, negative afterwards, null when eolFrom is not a date
sourceUrlstring/nullExact official API endpoint queried; null for an invalid pair
errorobject/nullNull on success; otherwise code, message and httpStatus

Date strings use YYYY-MM-DD. API v1 normally supplies lifecycle dates as dates or null; the projection also preserves boolean values without inventing a date. false, true and null remain distinct JSON values. Source flags describe the API snapshot: changing asOf changes the day calculation, not those flags. This Actor cannot reconstruct historical support status.

Input example

The Store prefill is:

{
"products": [{"product": "python", "release": "3.13"}],
"asOf": "2026-10-06",
"maxItems": 1
}

Both products and asOf are required. Use the source's exact product slug and release-cycle name, for example python and "3.13"; a version number must be a JSON string. Product slugs are lowercased and surrounding whitespace is removed. Releases are not guessed from installed patch versions, and aliases such as "latest" are not resolved to another release.

Optional controls: maxItems defaults to 1000 (range 1-10000) when omitted; the prefill sets it to 1. concurrency defaults to 5 (range 1-20). The input list can contain at most 100000 pairs. Only the first maxItems pairs are processed. Duplicates are processed as supplied; success and error rows both count toward the cap. Rows are saved in input order.

Output example

One actual local result from 2026-10-06 is shown below. Source values can change on later runs.

{
"product": "python",
"release": "3.13",
"releaseDate": "2024-10-07",
"latestVersion": "3.13.16",
"latestDate": "2026-09-30",
"eoasFrom": "2026-10-01",
"eolFrom": "2029-10-31",
"isEoas": true,
"isEol": false,
"isMaintained": true,
"sourceGeneratedAt": "2026-10-06T07:10:13+00:00",
"sourceUrl": "https://endoflife.date/api/v1/products/python/releases/3.13",
"asOf": "2026-10-06",
"daysToEol": 1121,
"error": null
}

The full one-row sample is in sample_output.json. Results are written to the default dataset; the Actor output links to its JSON items endpoint.

Pricing

Proposed event: support_lookup — $0.0002 per successful stored row, or $0.20 per 1000 successful rows. Error rows do not trigger this event. There is no proposed custom startup event. A reached event charge limit stops further output; rows already fetched in a concurrent batch can be omitted.

On the captured 2026-10-06 Store comparison, the recent-usage leader among returned direct comparables was endoflife.date Python Snapshot at $0.002 per cycle. This proposal is below that primary event and the lowest primary result price returned ($0.0004). See PRICING.md for names, dated API evidence, ranking rules and limitations. Monetization remains to be configured when the owner publishes.

Limits and failures

  • Only explicit, public endoflife.date API v1 lookups; no login or source API key is supplied.
  • Invalid pairs and unknown products/releases yield error rows. Other valid pairs continue. Invalid top-level input, an empty product list or an invalid planning date fails the run with a clear message.
  • Transport failures, HTTP 429 and 5xx receive at most three total attempts, using exponential waits of 0.5 then 1 second. A numeric Retry-After can extend a wait to at most 30 seconds. HTTP timeouts are set to 20 seconds.
  • HTTP 404 yields not_found; other unsuccessful status codes yield source_http; exhausted transport errors yield source_unavailable; malformed JSON or unusable lifecycle fields yield invalid_source.
  • Source coverage and update timing govern the results. Null is not evidence that a release is supported. Source dates alone do not describe support-contract eligibility, security fixes or licensing.

Use with AI agents / MCP

Use this Actor as a lifecycle lookup tool in an upgrade-planning workflow. Supply an explicit planning date and a small maxItems value. Fetch the returned dataset and check error before reading lifecycle fields. Inspect sourceGeneratedAt for freshness, distinguish null from false, and use daysToEol to sort dated deadlines. A latestVersion result is a patch version within the requested release, not an upgrade recommendation.

The same input object can be passed through an Apify MCP integration after publication; see Apify’s official AI-agent integration guide. Tool wiring and cloud execution are not configured or tested by this local build. No agent-generated description or guessed lifecycle date is added to the output.

FAQ

Why does a maintained release have an expired active-support date? The API can report continued security or extended support after active support ends. isMaintained and isEoas are separate source flags.

Why is daysToEol null? The source did not provide a calendar EOL date. The Actor preserves null or a source boolean rather than treating it as a date.

Can I pass Python 3.13.16 as the release? Use the exact release identifier provided by endoflife.date (3.13 in this example). Patch versions and aliases are not mapped to release cycles.

Can I backdate asOf to retrieve historical data? asOf only controls the calendar-day difference. The API still returns its current generated snapshot.

Do failed lookups incur the custom event? No. Only successfully normalized and saved rows trigger support_lookup; errors still count toward maxItems.

Local development

Create storage/key_value_stores/default/INPUT.json using the input example. From the Actor directory, run in PowerShell:

$env:APIFY_LOCAL_STORAGE_DIR = "$PWD/storage"
$env:APIFY_IS_AT_HOME = "0"
& C:/GritWork/earn/.venv/Scripts/python -B -m src
& C:/GritWork/earn/.venv/Scripts/python -B -m pytest tests -q -p no:cacheprovider
apify validate-schema

The full test command includes the marked live test and needs internet access. Local storage retains earlier dataset rows if reused; use a fresh storage directory for an isolated repeat run. The local SDK warned that the event was ignored because this local Actor had no pay-per-event configuration; no Store billing was exercised.

Validation receipts: evidence/tests-final.log, evidence/schema-validation.log, evidence/metadata-validation.log, and evidence/behavior-proof.json. Final test output: 46 passed in 1.22s. The prefilled local run saved one result; its lookup-and-storage loop took 0.55s (evidence/local-run.log). These are measurements of this local run, not a throughput guarantee. Docker and cloud execution remain unverified.