KONEPS Live Tender Matcher
Pricing
from $1.00 / 1,000 koneps tender results
KONEPS Live Tender Matcher
Unofficial, unaffiliated tool that fetches, filters, and normalizes live Korean public procurement notices from the official PPS KONEPS Open API.
Pricing
from $1.00 / 1,000 koneps tender results
Rating
0.0
(0)
Developer
Byungwoong Yoo
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
3 days ago
Last modified
Categories
Share
KONEPS Live Tender Matcher — Apify Actor
Fetch Korean public procurement notices from the official Public Procurement Service (PPS) KONEPS API, filter them for a buyer's use case, and return flat JSON records that export cleanly to CSV.
This is an independent, unofficial product. It is not affiliated with, endorsed by, or operated by PPS, KONEPS, or the Korean government. The original KONEPS notice is always authoritative.
The Actor does not use a paid external API. Each user supplies their own free data.go.kr service key.
Current Store price: $1.00 per 1,000 successfully returned tender records, plus the standard $0.00005 Actor-start event. Apify platform usage is included. Filtered-out notices and failed output writes do not trigger the tender-result event.
30-second fit check
Use this Actor when you need a spreadsheet-ready shortlist of public Korean tenders and want to answer three questions quickly:
- Which notices match my keywords or region?
- What changed, and when is each bid due?
- Where is the authoritative original notice?
Start from the configured public example: 나라장터 AI·자동화 용역 찾기. Replace the secret placeholder with your own free data.go.kr key, review the date range, and run it on Apify. The example returns at most 10 records and sets maxSpendUsd to $0.01. It will not submit a bid or decide whether you are eligible.
Each returned record has a flat shape like the following. This is an illustrative field shape, not a live procurement notice:
{"bidNoticeNo": "<official notice number>","title": "<official notice title>","noticeAgency": "<issuing agency>","budgetKrw": 0,"deadlineAt": "<official timestamp>","status": "<normalized notice state>","sourceUrl": "<original KONEPS notice URL>"}
Cost boundary: returned records cost $0.001 each, the start event costs $0.00005, and Apify platform usage is included. The example's finite $0.01 cap is enforced before output; a smaller platform run cap wins if you set one.
한국어 빠른 안내
나라장터 입찰 공고 API를 CSV로 받을 수 있나요?
네. 이 Actor는 조달청 나라장터 입찰 공고 Open API의 서비스·물품·공사·외자·기타 공고를 조회하고, 공고 번호·기관·예산·마감일·변경 상태·원문 URL을 평면 JSON으로 정규화합니다. 결과는 Apify에서 CSV, Excel, JSON으로 내보낼 수 있습니다.
한국 공공조달 공고 데이터를 어떻게 필터링하나요?
공고 등록일 또는 변경일 범위를 지정하고, 선택적으로 키워드와 지역을 입력합니다. 같은 공고는 공식 bidNtceNo + bidNtceOrd를 기준으로 중복 제거합니다. 누락된 값은 추측하지 않고 null로 반환하며, 입찰 전에는 반드시 원문 공고를 확인해야 합니다.
What it does
- Queries a Korean date range by notice registration time or change time.
- Uses the matching official operation for services, goods, construction, foreign procurement, and other notices.
- Applies optional keyword and region filters.
- Normalizes notice number, title, agencies, budget, bid deadline, change state, and original KONEPS URL.
- Deduplicates by
bidNtceNo + bidNtceOrd(with a deterministic fallback only when the official ID is absent). - Pushes one flat dataset item per unique result for JSON, CSV, Excel, API, Make, or Zapier use.
- Can charge exactly one
tender-resultevent for each successfully pushed result under Apify pay-per-event pricing.
Official source and verified fields
Source: PPS KONEPS Bid Public Notice API, data.go.kr dataset 15129394.
The official API is free, real-time, JSON/XML, automatically approved for development and production, and has a 1,000-call development allowance at the time of implementation. Check the source page for the current allowance and terms.
The implementation uses these official list operations:
| Input type | Official operation |
|---|---|
service | getBidPblancListInfoServc |
goods | getBidPblancListInfoThng |
construction | getBidPblancListInfoCnstwk |
foreign | getBidPblancListInfoFrgcpt |
other | getBidPblancListInfoEtc |
The official reference document defines inqryDiv=1 as registration-time lookup and inqryDiv=3 as change-time lookup. Both use inqryBgnDt and inqryEndDt in YYYYMMDDHHMM format.
Core output mappings are defensive:
- ID/title:
bidNtceNo,bidNtceOrd,bidNtceNm,refNo - parties:
ntceInsttNm,dminsttNm - dates:
bidNtceDt,bidBeginDt,bidClseDt,opengDt - budget:
asignBdgtAmt, thenbdgtAmt, thenpresmptPrce - change status:
chgDt,chgNtceRsn,ntceKindNm,reNtceYn - links:
bidNtceDtlUrl,bidNtceUrl,stdNtceDocUrl
If PPS omits or changes a non-required field, the Actor returns null rather than inventing a value. Always read the original notice before bidding.
Service key setup
- Create or sign in to a
data.go.kraccount. - Apply for API 15129394.
- Paste either the encoded or decoding service key into
serviceKeyin the Actor input.
serviceKey is marked isSecret: true. Apify encrypts it at rest in saved Actor inputs and decrypts it only for the run. The Actor never logs, returns, or writes the key to output. Do not commit a real key to Git, examples, .env, or local storage.
Input example
See ./examples/sample_input.json. Replace the placeholder with your own key and choose a current date range. The inclusive date range is limited to 31 days and page/result caps are validated before any API request.
Output
Every dataset record is deliberately flat. Important fields include:
bidNoticeNo,bidNoticeOrder,title,businessTypeKonoticeAgency,demandAgencybudgetKrw,budgetField, and the three source budget fieldsdeadlineAt,status,isChanged,changeAt,changeReasonregion,matchedKeywords,sourceUrl,documentUrl
An OUTPUT key-value-store record summarizes fetched, matched, deduplicated, and pushed counts without storing credentials.
Pay-per-event pricing and spend controls
The live Store configuration is:
tender-result: $0.001 per successfully returned record (shown as $1.00 / 1,000)apify-actor-start: $0.00005- primary event:
tender-result - platform usage: included (
Pay per event + usageis off) - minimum selectable max cost per run: $0.01
Code and Console configuration must remain aligned:
- Deploy the Actor.
- In Apify Console → Monetization, select Pay per event.
- Define a custom event named exactly
tender-resultat the disclosed per-result price. - Remove the synthetic
apify-default-dataset-itemevent before saving the pricing setup. Leaving it enabled would charge each pushed record twice: once for that synthetic event and once fortender-result. - Keep the synthetic
apify-actor-startevent at its recommended default price. Do not charge it manually in code. - Enable Pay per event + usage only if the intended commercial setup is that Actor users, rather than the developer margin, cover compute/storage/network usage. This lowers pricing transparency and makes the Actor ineligible for agentic payments, so leave it off for the normal Store configuration after validating unit economics.
- Set a sensible minimum maximum cost in the monetization configuration.
- Recommend that API callers also pass the run option
maxTotalChargeUsd. The Actor requires the finite inputmaxSpendUsd; when both caps are present, the lower one wins.
Billing is fail-closed:
- Under active PPE pricing, the Actor refuses to run if
tender-resulthas no positive configured event price. - It also refuses to run if
apify-default-dataset-itemis still configured, preventing accidental double charging before any result is fetched or written. - The input cap is converted to a maximum number of result events before output starts.
- If
maxTotalChargeUsdis supplied as a run option, the lower of that platform cap andmaxSpendUsdwins; otherwise the finite input cap applies. - Results use
Actor.pushData(record, 'tender-result'); the Actor increments its output count only whenchargedCount === 1. - It stops immediately when Apify reports the event charge limit has been reached.
- In a free/local build, records are pushed without a billable event.
Apify's current monetization documentation: Pay-per-event and SDK charging limits.
Local checks
npm installnpm testnpm run check
For a local Actor run, place a private input at storage/key_value_stores/default/INPUT.json (never commit it), then:
$npm start
To emulate PPE locally, Apify documents ACTOR_TEST_PAY_PER_EVENT=true. Because this Actor also verifies that tender-result is present in the pricing configuration, complete the definitive PPE smoke test on a beta build after defining the event in Apify Console.
Deployment
With the Apify CLI installed and authenticated:
$apify push
Release checks:
- Validate
.actor/input_schema.jsonand.actor/dataset_schema.jsonin Apify Console/CLI. - Confirm
serviceKeyrenders as a secret field. - Confirm the Console still uses the disclosed
tender-resultprice and has no default-dataset event. - Run one low-limit paid test only with a legitimate user-supplied
data.go.krkey. - Confirm the Store README clearly states that users bring their own free public-data key and may pay Apify platform/event charges.
- Export the dataset as both JSON and CSV and inspect nulls, amounts, timestamps, and original links.
Limitations
- This Actor discovers public notices; it does not decide eligibility, prepare a bid, sign declarations, or submit to KONEPS.
- Region is a client-side match over public region and agency fields because fields vary by work category.
- A missing deadline is excluded when
onlyOpen=true. - API limits, schemas, and procurement rules can change. The original notice is authoritative.