Python API Reference
This section documents the low-level classes and object definitions exported by the pyproc package. The primary class is Lpse, which acts as the HTTP client wrapper for public SPSE portals.
Creates an LPSE client instance targeting a specific government SPSE instance endpoint.
| Parameter | Type | Description |
|---|---|---|
| instansi | str | Slug name of the LPSE host. E.g. "kemenkeu", "jakarta", "pu", or "nasional". |
| timeout | int | HTTP request timeout in seconds (default: 10). |
| verify | bool | Whether to verify SSL/TLS certificates (default: False). Recommended to leave False. |
| user_agent | str | Custom HTTP User-Agent string. If None, defaults to a standard browser headers template. |
Retrieves tender (lelang) package listings from the LPSE database.
| Parameter | Type | Description |
|---|---|---|
| start | int | Start record index (offset) for server-side pagination. |
| length | int | Page size limit (e.g. 10, 50, 100). Use 0 for server maximum. |
| data_only | bool | If True, returns a clean Python list containing rows. If False, returns the raw SPSE DataTables dictionary with keys "draw", "recordsTotal", and "data". |
| kategori | JenisPengadaan | Enum filter for the procurement type. |
| search_keyword | str | String filter matches inside title or codes. |
| order | By | Sorting column option (default: By.KODE). |
| tahun | int | Budget year limit (e.g. 2025). |
| ascending | bool | Sort order logic. Set True for ASC, False (default) for DESC. |
Retrieves non-tender listings (Direct Selection, Direct Purchasing, or Direct Appointment) from the SPSE database.
| Parameter | Type | Description |
|---|---|---|
| start | int | Start record index (offset) for server-side pagination. |
| length | int | Page size limit (use 0 for maximum). |
| data_only | bool | If True, returns a clean Python list containing rows. If False, returns the raw SPSE DataTables dictionary structure. |
| kategori | JenisPengadaan | Enum filter for the procurement type. |
| search_keyword | str | String filter matches inside title or codes. |
| order | By | Sorting column option (default: By.KODE). |
| tahun | int | Budget year limit (e.g. 2025). |
| ascending | bool | Sort order logic (default: False). |
Retrieves logged pencatatan non-tender items (distinct dataset under SPSE /dt/nonspk). Parameters match get_paket_non_tender.
Retrieves logged swakelola items.
| Parameter | Type | Description |
|---|---|---|
| rekanan | str | Filter swakelola items by executing partner/contractor name query. |
| tipe_swakelola | TipeSwakelola | Enum filter specifying swakelola type (TIPE_I to TIPE_IV). |
Retrieves logged emergency procurement items. Parameters match get_paket_non_tender.
Extracts CSRF/Auth token values from session headers or cookies to make authenticated requests.
Static Method: Queries LKPP master agency directory. Returns list of dictionaries detailing K/L/PD codes and names.
Static Method: Queries LKPP master LPSE server directory. Returns codes, domain addresses, and slugs of all active LPSE units in Indonesia.
Static Method: Performs direct public API queries using the LKPP Satu Data ISB service (acts as fallback when target host is down).
| Parameter | Type | Description |
|---|---|---|
| tahun | int | Fiscal year filter. |
| kode_lpse | int | Numerical identifier of the target LPSE server in the master list. |
Initializes and returns an LpseDetil parser object containing methods to parse nested pages of a specific tender.
Initializes and returns an LpseDetilNonTender parser object containing methods to parse nested pages of a specific non-tender.
Initializes and returns an LpseDetilPencatatanNonTender parser object containing methods to parse logged non-tender transaction entries.
Initializes and returns an LpseDetilSwakelola parser object containing methods to parse swakelola detail entries.
Initializes and returns an LpseDetilPengadaanDarurat parser object containing methods to parse emergency procurement details.
Enum: JenisPengadaan
An Enum representing general procurement categories in the SPSE portal system.
| Enum Attribute | Value | Description |
|---|---|---|
JenisPengadaan.PENGADAAN_BARANG |
"1" |
Goods/Equipment Procurement (Pengadaan Barang) |
JenisPengadaan.PEKERJAAN_KONSTRUKSI |
"2" |
Civil/Construction Works (Pekerjaan Konstruksi) |
JenisPengadaan.JASA_KONSULTASI |
"3" |
Consulting Services (Jasa Konsultansi) |
JenisPengadaan.JASA_LAINNYA |
"4" |
Other Auxiliary Services (Jasa Lainnya) |
Enum: By
An Enum representing sorting parameters targeting SPSE query columns.
| Enum Attribute | Value | Target Column |
|---|---|---|
By.KODE |
0 |
Tender ID / Code |
By.NAMA |
1 |
Tender Title / Name |
By.KATEGORI |
2 |
Procurement Category |
By.INSTANSI |
3 |
Government Institution |
By.HPS |
4 |
HPS (Self-estimated contract price) |
Enum: KontrakStatus
An Enum representing procurement contract states.
| Enum Attribute | Value | Meaning |
|---|---|---|
KontrakStatus.SELESAI |
0 |
Tender complete / executed successfully. |
KontrakStatus.PEMUTUSAN |
1 |
Contract terminated (Pemutusan Kontrak). |
KontrakStatus.PENGHENTIAN |
2 |
Contract suspended (Penghentian Kontrak). |
Enum: TipeSwakelola
An Enum representing swakelola execution categories (Tipe Swakelola).
| Enum Attribute | Value | Description |
|---|---|---|
TipeSwakelola.TIPE_I |
"1" |
Planned, executed, and supervised directly by the bidding state institution. |
TipeSwakelola.TIPE_II |
"2" |
Planned and supervised by the bidding agency, executed by another state institution partner. |
TipeSwakelola.TIPE_III |
"3" |
Planned and supervised by the bidding agency, executed by a community group organization (Ormas). |
TipeSwakelola.TIPE_IV |
"4" |
Planned and supervised by the bidding agency, executed by a local community resident group (Kelompok Masyarakat). |
Class: BaseLpseDetil
Acts as the base manager for executing sub-page scraping on a specific tender. Sub-pages are evaluated dynamically based on availability.
Instantiated by the parent client. Stores package ID metadata and connection hooks.
Fetches and runs parsing threads for all available section sub-pages (Announcement, Participants, Evaluations, Winners, Schedule) concurrently using client workers.
Aggregates all parsed details into a nested Python dictionary containing keys like "pengumuman", "peserta", "pemenang", etc.
Scrapes specific fields inside the announcement page: budget values, location coordinates, requirements, qualifications, and LPSE code IDs.
Returns the complete list of participating bidder companies registered for this tender package.
Parses the detailed evaluation matrix page containing bid evaluation results (administrative, technical, and price evaluation details).
Parses and lists the final winner(s) details, including NPWP identifier, name, address, bid price, and negotiated price values.
| Parameter | Type | Description |
|---|---|---|
| all | bool | If True, yields detailed results for all candidates. If False, yields only the official primary winners. |
| key | str | Price key target used to sort/validate candidates (default: 'hasil_negosiasi'). |
Scrapes details of the contracted winner, yielding the final contract signing details and execution status.
Retrieves the complete schedule list with dates, step names, and status (past, active, future) for the entire procurement process.
Subclasses: Specialized Detail Managers
Different kinds of SPSE procurements structure detail grids slightly differently. PyProc resolves this transparency using sub-classes inheriting from BaseLpseDetil:
| Class Name | Instantiated By | Source Reference |
|---|---|---|
LpseDetil |
detil_paket_tender(id) |
lpse.py#L473 → |
LpseDetilNonTender |
detil_paket_non_tender(id) |
lpse.py#L535 → |
LpseDetilPencatatanNonTender |
detil_paket_pencatatan_non_tender(id) |
lpse.py#L592 → |
LpseDetilSwakelola |
detil_paket_swakelola(id) |
lpse.py#L606 → |
LpseDetilPengadaanDarurat |
detil_paket_pengadaan_darurat(id) |
lpse.py#L622 → |
Manager for standard tender procurement details. Instantiated via Lpse.detil_paket_tender(id).
Supported detail_methods:
get_pengumuman(): Scrapes tender announcement details.get_peserta(): Scrapes participating bidder companies.get_hasil_evaluasi(): Scrapes evaluation matrix page.get_pemenang(all=False, key='hasil_negosiasi'): Scrapes winners list.get_pemenang_berkontrak(): Scrapes contract-awarded winners list.get_jadwal(): Scrapes schedule steps.
Manager for standard non-tender (direct procurement/selection) details. Instantiated via Lpse.detil_paket_non_tender(id).
Supported detail_methods:
get_pengumuman(): Scrapes non-tender announcement details.get_peserta(): Scrapes participating bidders.get_hasil_evaluasi(): Scrapes non-tender evaluation details.get_pemenang(): Scrapes winner list.get_pemenang_berkontrak(): Scrapes contract-awarded winners.get_jadwal(): Scrapes non-tender schedules.
Manager for recorded non-tender (pencatatan non-tender) procurement details. Instantiated via Lpse.detil_paket_pencatatan_non_tender(id).
Supported detail_methods:
get_pengumuman(): Scrapes recorded announcement details.get_pemenang_berkontrak(): Scrapes contracted winners.
Manager for self-managed (swakelola) procurement details. Instantiated via Lpse.detil_paket_swakelola(id).
Supported detail_methods:
get_pengumuman(): Scrapes swakelola announcement details.get_pelaksana(): Scrapes swakelola implementing officer/team (cached inself.pelaksana).
Manager for emergency procurement (pengadaan darurat) details. Instantiated via Lpse.detil_paket_pengadaan_darurat(id).
Supported detail_methods:
get_pengumuman(): Scrapes emergency announcement details.get_pemenang_berkontrak(): Scrapes contracted emergency winners.
HTML Parsers: Low-Level Parser API
PyProc resolves raw HTML detail pages into structured data matrices using a set of purpose-built parsers derived from BaseLpseDetilParser.
Abstract base parser representing a page scraper context. Downloads page content and triggers subclass parsers.
Fetches the detail sub-page url (combining LPSE host address and formatted target paths) and passes raw bytes to parse_detil. Employs backoff fibonacci retry routines on server/network failures.
Abstract parsing method overridden by specialized parsers to extract table rows, forms, and grid fields from raw HTML string bytes.
Helper static utility method. Sanitizes and normalizes Indonesian Rupiah (IDR) raw strings containing decimals and thousands separators (e.g. converting Rp. 150.000.000,00 to float 150000000.0).
Specialized Parser Implementations
PyProc registers 21 specialized parser subclasses mapped to the different SPSE procurement types. They parse target HTML layouts dynamically using BeautifulSoup, transforming tabular data keys (headers/labels) into unified snake_case dictionaries.
1. Standard Tender Parsers (Tender SPSE)
These parsers inherit directly from BaseLpseDetilParser and target the standard tender pages:
-
LpseDetilPengumumanParser(Path:/lelang/{id}/pengumumanlelang): Parses tender announcement tables. Extracts metadata like tender name, description, owner agency (K/L/PD), structural budgets (HPS, ceiling values), location data, and technical/qualification requirement criteria. -
LpseDetilPesertaParser(Path:/lelang/{id}/pesertalelang): Parses the bidder company list containing bidder registered names, NPWP, bidding offers, and prices. -
LpseDetilHasilEvaluasiParser(Path:/lelang/{id}/evaluasilelang): Parses the evaluation grid matrix. Resolves columns for administrative, technical, and price evaluation flags per bidder. -
LpseDetilPemenangParser(Path:/lelang/{id}/pemenanglelang): Parses the final winner table details. Resolves candidates, final bid prices, and negotiated prices. -
LpseDetilPemenangBerkontrakParser(Path:/lelang/{id}/pemenangberkontrak): Inherits from LpseDetilPemenangParser. Extracts contract signing status and values for awarded candidates. -
LpseDetilJadwalParser(Path:/lelang/{id}/jadwal): Parses chronological schedule steps, dates, and active step markers.
2. Non-Tender / Direct Selection Parsers
These parsers mirror standard tender parsers but target direct selection endpoints (/penunjukan or /pengadaangrow grids). They inherit from their tender parser equivalents to reuse BeautifulSoup parsers:
LpseDetilPengumumanNonTenderParser(Announcement parser inheriting fromLpseDetilPengumumanParser)LpseDetilPesertaNonTenderParser(Bidders parser inheriting fromLpseDetilPesertaParser)LpseDetilHasilEvaluasiNonTenderParser(Evaluation parser inheriting fromLpseDetilHasilEvaluasiParser)LpseDetilPemenangNonTenderParser(Winner parser inheriting fromLpseDetilPemenangParser)LpseDetilPemenangBerkontrakNonTenderParser(Contract parser inheriting fromLpseDetilPemenangNonTenderParser)LpseDetilJadwalNonTenderParser(Schedule parser inheriting fromLpseDetilJadwalParser)
3. Recorded (Pencatatan) Parsers
Used to parse recorded transactions. They inherit from BaseLpseDetilParser and include PencatatanTableParserMixin to handle different layout styles:
-
LpseDetilPengumumanPencatatanParser: Parses general details of recorded transactions (non-tender catalog orders). -
LpseDetilRealisasiPencatatanParser: Parses real-time procurement execution and payout details. -
LpseDetilPemenangBerkontrakPencatatanParser: Inherits from LpseDetilRealisasiPencatatanParser. Parses contractor profiles and registration details. -
LpseDetilPengumumanPencatatanNonTenderParser: Inherits from LpseDetilPengumumanPencatatanParser. Handles recorded non-tender announcements. -
LpseDetilPemenangBerkontrakPencatatanNonTenderParser: Inherits from LpseDetilPemenangBerkontrakPencatatanParser. Handles recorded non-tender contracts.
4. Swakelola and Emergency Parsers
Parsers specialized for self-managed (Swakelola) and emergency (Pengadaan Darurat) government transactions:
-
LpseDetilPengumumanSwakelolaParser(Swakelola Announcement): Inherits fromLpseDetilPengumumanPencatatanParser. Parses targets, objectives, and self-managed group scopes. -
LpseDetilPelaksanaSwakelolaParser(Swakelola Execution): Inherits fromLpseDetilRealisasiPencatatanParser. Parses implementing team members and officers. -
LpseDetilPengumumanPengadaanDaruratParser(Emergency Announcement): Inherits fromLpseDetilPengumumanPencatatanParser. Parses disaster relief and emergency response criteria details. -
LpseDetilPemenangBerkontrakPengadaanDaruratParser(Emergency Winners): Inherits fromLpseDetilPemenangBerkontrakPencatatanParser. Parses emergency contract structures.