# Changelog of Indonesia SDPPI Telecom Type Approval Certificates (`a-g-d/id-sdppi`) Actor

- **URL**: https://apify.com/a-g-d/id-sdppi/changelog.md
- **Full Actor documentation**: https://apify.com/a-g-d/id-sdppi.md

## Changelog

All notable changes to this project are documented here. The format follows
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and the project adheres to
[Semantic Versioning](https://semver.org/).

### \[0.1.0] - 2026-10-14

#### Added

- Indonesia's SDPPI telecom equipment type-approval certificate register on
  sertifikasi.postel.go.id: the issued certificates list (Sertifikat Terbit, 118,452
  certificates on 2026-10-14) and the revoked certificates list (Sertifikat Pencabutan,
  219\), read through the site's own query service with the two documents its public pages
  send. One item per certificate row with English camelCase keys: certificate number,
  issue and expiry timestamps, validity flag, applicant, application ID, legal basis,
  manufacturer and its country (code and name), device name, brand, marketing name, model,
  last update, source page and fetch time.
- Filters: keyword (the site's own search), brand, model and applicant (the site's own
  advanced filter, case-insensitive "contains", combined with AND), manufacturer country
  (ISO code, checked per row), issued since, issued before and expiring before (checked per
  row while paging newest first; `issuedSince` ends the run once a whole page predates it).
- Privacy: only the fields of the public list are requested and output; the site's
  customer, contact person, tax, phone, fax, e-mail, address, business-number, IMEI,
  per-certificate detail and file fields are never queried, and a test checks the request
  documents against that list.
- Politeness: at least 1 s between requests, one connection, 500 rows per page, an honest
  User-Agent with the site's own Origin and Referer headers, a single count request plus
  only the pages needed.
- Resilience: retries with exponential backoff and jitter on connection errors, timeouts,
  5xx, 429, redirects, non-JSON answers and GraphQL errors other than a refusal, inside a
  run-wide backoff budget; a `forbidden` answer, an HTTP refusal, a challenge page or a
  changed answer shape stops the run loudly; the run stops cleanly shortly before its
  timeout; optional Apify Proxy.
- Pay-per-event billing: `product-record` per stored row, charged after storing; each
  page is planned against the remaining spending limit and the run stops cleanly when it
  runs out.
