Santa Fe Tenders Scraper & Monitor avatar

Santa Fe Tenders Scraper & Monitor

Pricing

Pay per event

Go to Apify Store
Santa Fe Tenders Scraper & Monitor

Santa Fe Tenders Scraper & Monitor

Scrape and monitor every public tender of the Province of Santa Fe, Argentina: licitaciones, concursos, contrataciones directas of ministries and hospitals with buyer, budget, deadlines, rubros, expediente and pliego/circular/acta PDF links. Delta mode for new, status-changed and amended tenders.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stefano Seggio

Stefano Seggio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

15 hours ago

Last modified

Share

Santa Fe Tenders Scraper & Monitor (Licitaciones Santa Fe) — Store Overview

Actor ID: jfoq1flE7KqKb3qAb · Store URL: https://apify.com/stefano_seggio/santafe-compras-monitor · Version: 2.0 (latest patch per Changelog: 2.0.1)


Executive Summary & Business Use Case

Santa Fe Tenders Scraper & Monitor extracts and monitors the official Gestiones de Compra register of the Province of Santa Fe, Argentina (santafe.gov.ar/gestionesdecompras), reading the site's own internal JSON search endpoint (AppAjax.php?a=consultas.getContrataciones) and the public detail page of every process. This is the single, official record of every licitación pública, licitación privada, concurso, contratación directa, subasta and convenio marco run by the province's ministries, hospitals, SAMCOs, Aguas Santafesinas, airports and the Lotería, roughly 1,100 new processes a year and over 31,000 since 2000. For every process the Actor returns the buyer (comprador) and requesting body (organismo comitente), the published budget (Monto Original, with currency), the submission deadline and bid-opening date, the rubro/sub-rubro classification, the expediente number with a link to the province's file tracker, institutional contact details, and direct links to the pliego, circulares, actas de apertura and preadjudicación documents. In delta mode it also tags every record as a NEW_LISTING, a STATUS_CHANGE (the process moved from one estado to another) or an UPDATED amendment, none of which the site itself signals in any visible way.

The register has no publication-date column in its listing, no RSS, no e-mail alerts and a CSV export that strips ids, amounts and document links — so anyone tracking Santa Fe procurement today either re-searches the portal by hand or subscribes to a commercial alert service built for humans, not for systems. This Actor is the missing structured layer between the register and a business process.

Three concrete uses the real data supports: (1) suppliers to the provincial health system — pharmaceutical and medical-supply distributors, cleaning and catering contractors to hospitals and SAMCOs — use rubroNames, comprador and submissionDeadline to catch a matching tender inside its short bid window (a contratación directa published on a Friday can close the following Monday) and pull the pliego straight from documents; (2) construction, IT, security and facility-service contractors use objeto, organismoComitente, montoOriginalAmount and isElectronic/bidUrl to route province-wide opportunities to the right sales owner and register on the electronic-bid portal before the deadline; (3) bid consultants and gestores de licitaciones run the Actor on a schedule with onlyNew on and watch for event_type = UPDATED together with hasCircular or a new openingNote to know when a client's open tender needs its draft offer revisited. Because montoOriginalAmount carries a real published budget figure (in ARS or USD, never converted), spending-analysis use cases — by transparency NGOs, journalists or competitors benchmarking who is awarded what via hasAdjudicacion/hasOrdenProvision — are also directly supported by the data, unlike registers that expose no monetary field at all.

Technical Features & V2 Architecture Highlights

Delta persistence. With onlyNew: true the Actor keeps a private, named key-value store per filter set — santafe-compras-monitor-state-<deltaStateName> — that remembers, for every process it has ever delivered, the estado it was last seen in and a fingerprint (contentHash) of its detail page. deltaStateName defaults to a fingerprint of the run's own filters (so unrelated schedules never collide) but can be set explicitly to make two tasks share one memory, and resetState: true wipes it to force a fresh baseline. This state persists across runs, which is what makes scheduled monitoring return only genuinely new material instead of the same processes every time.

Event types — domain-specific, not the generic set. This actor's event_type enum is exactly NEW_LISTING, STATUS_CHANGE, UPDATED — there is no CLOSED event. That is a deliberate fit to how the register works: a tender is never "closed" in the sense of being removed, it moves between three visible lists — AP (Para Apertura), ET (En Trámite), CO (Concluida) — so a transition is modeled as STATUS_CHANGE with previousEstado recording where it came from, rather than as a close event. UPDATED exists because the listing itself never changes when a circular aclaratoria, an acta de apertura or a preadjudicación report is published — those only show up on the detail page, so the Actor re-reads and fingerprints it to detect them.

onlyNew — exact behaviour per its own schema. Per input_schema.json: "Remembers every process it has delivered (per filter set, in a named key-value store) with the estado it was in and a fingerprint of its detail page, and returns only processes that are new, moved to another estado, or were amended since. Each estado list is walked newest-first and stops as soon as it reaches already-known records." Practically: the AP and ET lists are small enough to be walked in full every run, so a process that vanished from them is probed on its own detail page and delivered as STATUS_CHANGE even if the CO list isn't being monitored. Amendment detection additionally depends on recheckWindowDays (default 30): known processes opening within that many past days, or any time in the future, get their detail page re-read every run — re-reads that find no change are not charged.

Field count. This actor's own README.md and dataset_schema.json confirm 84 total output fields: a 6-field integration envelope (record_id, event_type, scraped_at, is_new, source_url, data_source) — described in the README as identical across this developer's other public-register Actors, so one webhook parser serves all of them — plus 78 process-specific fields (the version-1 fields kept verbatim, normalised UTC/amount/boolean twins, and the full detail-page extraction). This is not the generic "18 base fields" pattern sometimes used elsewhere in the fleet; Santa Fe's own schema is the source of truth here and it declares 84.

Cost-relevant architecture detail. fetchDetail (default true) controls whether each record costs a result (full detail page: budget, deadline, rubros, contact, expediente, document links, fingerprint) or a cheaper result-summary (listing-only, or a process the site reports as not yet published). Detail pages are fetched concurrently (maxConcurrency, default 5, max 10) since the site tolerated 10 parallel requests without throttling in verification.

Input Schema & JSON Configuration Example

FieldTypeDefaultDescription
estadosarray (AP|ET|CO)["AP"]Which lists to read. AP = Para Apertura (published, offers not yet opened - where every new tender appears first), ET = En Trámite (opened, being evaluated - actas and preadjudicación land here), CO = Concluida (finished). Each is a separate server-side query.
aniointeger(none)Year of the process number (anioGestion). The site's own UI always applies the current year; leave empty for all years (2000 onwards).
objetostring(none)Case-insensitive phrase search over the tender subject, e.g. 'limpieza', 'medicamentos', 'servicio de vigilancia'. Word order matters ('servicio de limpieza' matches, 'limpieza servicio' does not).
tipoGestionarray (13 codes)[]One server-side query per selected type. Codes are the site's own (L = Licitación Pública, P = Licitación Privada, T = Contratación Directa, ...).
tipoModalidadstring (enum)(none)Contracting modality code from the site.
compradorstring(none)The organism running the procedure, as its site id (idOrganismoLey12510, e.g. 27) or a distinctive part of its name (e.g. 'Administración Provincial de Impuestos', 'Hospital Cullen'). Names are matched against the site's own organism list at run start; an ambiguous name fails with the candidates listed.
solicitantestring(none)The organism the purchase is for, same id space and name matching as 'Buyer' (e.g. 'Ministerio de Salud').
rubrostring(none)Product/service category, as the site's idEspecie (e.g. 29) or part of its name (e.g. 'medicinales', 'limpieza', 'alimentos'). Matched against the site's 78 rubros at run start.
subrubrostring(none)Sub-category within the selected rubro, as idFamilia or part of its name. Requires 'Category (rubro)'.
nroGestionstring(none)Exact process number as printed on the site, e.g. '18' or '02' (combine with the year: several organisms share the same numbering).
nroExpedientestring(none)Exact, full expediente number, e.g. 'EE-2026-00001797-APPSF-OD' (partial values match nothing on the site).
openingFromstring (date)(none)Only tenders whose bid opening (fecha de apertura) is on or after this date. Absolute (2026-09-01) or relative: '7 days' counts back from today, '+7 days' counts forward (Santa Fe calendar). Applied client-side after fetching the listing (the site has no date filter) - rows outside the window are simply skipped and not remembered.
openingTostring (date)(none)Only tenders opening on or before this date. Absolute or relative ('+30 days' = opening within the next month). Client-side.
eventTypesarray (NEW_LISTING|STATUS_CHANGE|UPDATED)all threeNEW_LISTING = a process never delivered before; STATUS_CHANGE = a known process that moved to another estado (AP -> ET -> CO); UPDATED = a known open process whose detail page changed (a circular aclaratoria, an acta de apertura, a preadjudicación report, a new opening date...). The last two exist in delta mode only.
onlyNewbooleanfalse (prefill true)Remembers every process it has delivered (per filter set, in a named key-value store) with the estado it was in and a fingerprint of its detail page, and returns only processes that are new, moved to another estado, or were amended since. Each estado list is walked newest-first and stops as soon as it reaches already-known records.
recheckWindowDaysinteger30Delta mode with detail: known processes whose opening date is within this many days in the past (or any time in the future) get their detail page re-read every run to detect amendments (UPDATED). The register shows no 'last modified' signal, so this re-read is the only way to see a new circular or acta. 0 disables it. Re-reads are not charged unless something changed.
sortBystring (enum)"newest"'newest' (idGestion descending = most recently created first) is required for delta mode. 'openingSoonest' / 'openingLatest' order by bid-opening date; 'mostViewed' by the site's own view counter (full runs only).
deltaStateNamestringfingerprint of filtersOptional label for the memory of a monitoring task. Defaults to a fingerprint of your filters, so different schedules never interfere. Set the same name on two tasks to make them share one memory.
resetStatebooleanfalseForget every previously delivered process for this delta state and re-baseline (the run then returns up to 'Max records' newest processes).
maxItemsinteger100Hard cap on delivered records (and therefore on cost: you pay per record). In delta mode anything beyond the cap is simply delivered by the next run.
fetchDetailbooleantrueOpens each process page (one extra request) for the publication timestamp, budget (Monto Original), submission deadline, places, rubros, requesting organism, contact, expediente and the pliego / circular / acta / preadjudicación document links. Off = listing-only summary records (cheaper 'result-summary' price; no UPDATED detection and no status sweep).
maxConcurrencyinteger5How many process pages are fetched at once. The site answers a page in 0.1-0.3 s and tolerated 10 in parallel without throttling; 5 is a polite default.
dateRangestring (hidden, deprecated)(none)Kept for tasks created with version 1: '24h', '7d' or '30d' are interpreted as an opening-date window of that many days before AND after today.

JSON configuration example

{
"estados": ["AP", "ET"],
"anio": 2026,
"objeto": "medicamentos",
"tipoGestion": ["T"],
"comprador": "Hospital Cullen",
"rubro": "medicinales",
"eventTypes": ["NEW_LISTING", "STATUS_CHANGE", "UPDATED"],
"onlyNew": true,
"recheckWindowDays": 30,
"sortBy": "newest",
"deltaStateName": "hospital-cullen-medicinales",
"resetState": false,
"maxItems": 300,
"fetchDetail": true,
"maxConcurrency": 5
}

Output Dataset Sample & Data Dictionary

FieldTypeDescription
record_idstringSame value as idGestion - stable across runs (e.g. 138825).
event_typestringNEW_LISTING (never delivered before), STATUS_CHANGE (known process moved AP -> ET -> CO), UPDATED (known open process whose detail page changed: circular, acta, preadjudicación, new date...).
scraped_atstringISO-8601 UTC timestamp of this extraction (same for every record of one run).
is_newbooleantrue when this process was never delivered by a previous run of this delta state.
source_urlstringThe official detail page (gestion.php?idGestion=...).
data_sourcestringAttribution string (Gobierno de Santa Fe, CC BY-SA 2.5 AR).
idGestionstringThe register's own numeric process id, as a string.
estadostringThe list the process was found in: AP (Para Apertura), ET (En Trámite), CO (Concluida). For a STATUS_CHANGE found by the status sweep, the estado the detail page reports.
tipoGestionstring | nullProcedure type as printed, e.g. LICITACIÓN PÚBLICA, CONTRATACIÓN DIRECTA.
numeroGestionstring | nullProcess number within the organism and year, e.g. 18.
anioGestionstring | nullYear of the process number, e.g. 2026.
fechaHoraAperturastring | nullOpening date as the listing prints it, DD-MM-YYYY. Null for a record rebuilt from the detail page only.
objetostring | nullShort subject of the tender.
compradorstring | nullBuying organism (organismo licitante) as listed.
valorPliegostring | nullPrice of the bid documents as free text ('NO APLICA', 'SIN COSTO', '$ 8209,50 (PESOS ...)').
numeroExpedientestring | nullFile number as the listing prints it - often blank; see expediente for the detail-page value.
detailobject | nullThe version-1 detail object kept for compatibility: fields (label -> value), rubros[] and documentos[] {tipo, nombre, url}. Null when fetchDetail=false or the page is unavailable.
idGestionNumberintegeridGestion as a number - the register's creation order and the delta engine's ordering key.
numeroAniostring | nullHuman reference 'número-año', e.g. 18-2026.
tipoGestionCodestring | nullThe site's letter code for tipoGestion (L, P, A, T, B, V, C, I, D, S, X, Y, O).
tipoModalidadstring | nullContracting modality (Sin Modalidad, Convenio Marco, ...).
idOrganismoGestionstring | nullThe listing's internal organism id (a different id space from the comprador filter's idOrganismoLey12510).
objetoCompletostring | nullFull subject text from the listing.
destinosstring | nullDelivery / recipient organism text (ET and CO rows only).
fechaHoraAperturaFijastring | nullOpening timestamp as the API prints it, YYYY-MM-DD HH:mm:ss Santa Fe time.
openingAtstring | nullBid opening instant, UTC ISO-8601 (Santa Fe is UTC-3).
openingDatestring | nullYYYY-MM-DD, Santa Fe calendar.
daysUntilOpeninginteger | nullNegative once the opening has passed.
isOpeningInFutureboolean | nullWhether opening is still ahead.
valorPliegoAmountnumber | nullNumeric price of the bid documents when one is quoted.
valorPliegoCurrencystring | nullARS or USD.
valorPliegoIsFreeboolean | nulltrue for 'NO APLICA' / 'SIN COSTO' / '$ 0'; false when a price is quoted; null when undecidable.
previousEstadostring | nullFor STATUS_CHANGE: the estado the process was last delivered in.
isElectronicbooleantrue when the expediente matches the pattern the site uses to show its 'Ofertar' button (bids via gestionvirtual.santafe.gob.ar).
bidUrlstring | nullgestionvirtual.santafe.gob.ar bid form for electronic procedures.
printPdfUrlstringPrint-ready PDF of the whole record (output.php?a=gestiones.ver&print=1).
documentsUrlstringDocuments-only view of the record (solodocs=1).
detailFetchedbooleantrue when the detail page was read and parsed (charged as 'result'); false for listing-only records ('result-summary').
detailErrorstring | nullUNPUBLISHED when the site says the process does not exist / is not published yet; otherwise null.
estadoLabelstring | nullThe detail page's own Estado text, e.g. 'PARA APERTURA', 'EN TRÁMITE - Análisis de ofertas', 'CONCLUIDA'.
estadoStagestring | nullEvaluation stage suffix of the estado label, when present.
estadoFromDetailstring | nullAP / ET / CO derived from estadoLabel.
publishedAtLocalstring | null'DD-MM-YYYY HH:mm Hs.' as printed.
publishedAtstring | nullPublication instant, UTC ISO-8601 - the only true publication timestamp on the register (never changes, even when documents are added later).
publishedDatestring | nullYYYY-MM-DD, Santa Fe calendar.
daysSincePublishedinteger | nullDays since publication.
modalidadstring | nullModalidad (detail).
alcancestring | nullScope, e.g. NACIONAL.
descripcionstring | nullFull description.
rubrosarrayCategory / sub-category pairs ('RUBRO / SUBRUBRO' split) as {rubro, subrubro, raw}.
rubroNamesarrayRubro names.
subrubroNamesarraySubrubro names.
organismoComitentearrayRequesting body / bodies the purchase is for.
organismoLicitantestring | nullOrganism running the procedure (detail page).
submissionPlacestring | nullWhere / how offers are submitted (often an e-mail or the gestionvirtual link).
submissionDeadlineLocalstring | nullOffer submission deadline as printed.
submissionDeadlinestring | nullOffer submission deadline, UTC ISO-8601 - distinct from the opening; the date suppliers schedule against.
daysUntilDeadlineinteger | nullDays until the submission deadline.
openingPlacestring | nullLugar de apertura.
openingAtDetailLocalstring | nullFecha de apertura (detail, raw).
openingNotestring | nullText after the opening date on the detail page, e.g. '(*** NUEVA FECHA ***)'.
deliveryPlaceAndDatestring | nullLugar y fecha de entrega.
contactInfostring | nullInstitutional contact text as published (phone / e-mail).
contactEmailsarrayE-mail addresses found in the contact and submission fields, lower-cased.
contactPhonesarrayContact phone numbers.
valorPliegoDetailstring | nullValor del pliego (detail).
montoOriginalTextstring | nullBudget / estimated value as printed, e.g. '$ 207.302.040,00' or 'U$S 60.000,00'.
montoOriginalAmountnumber | nullNumeric budget. Under Argentine inflation compare with publishedDate; never converted.
montoOriginalCurrencystring | nullARS or USD.
expedientesarrayFile numbers from the detail page with the tracker link, as {label, code, url}.
expedientestring | nullFirst expediente code from the detail page (the listing's numeroExpediente is often blank).
expedienteUrlstring | nullLink to the province's file tracker.
notesarrayFree-form 'IMPORTANTE' blocks some buyers add to the page.
documentsarrayEvery attachment as {kind, tipo, nombre, url, id}. Kinds: pliego, circular, llamado, acta_apertura, nomina_oferentes, cuadro_comparativo, informe_comision, preadjudicacion, adjudicacion, orden_provision, documento_provision, planimetria, otros.
documentCountintegerNumber of documents.
documentKindsarrayDistinct document kinds present.
hasPliegobooleanBid-document pack published.
hasCircularbooleanA circular aclaratoria/modificatoria was published - the pliego changed.
hasActaAperturabooleanOffers were opened.
hasPreadjudicacionbooleanA pre-award report exists.
hasAdjudicacionbooleanA 'Norma Legal de Adjudicación' (award decision) was published.
hasOrdenProvisionbooleanA purchase order was issued.
hasCuadroComparativobooleanA price comparison table was published.
contentHashstring | nullSHA-1 fingerprint of the detail page's data and documents - the delta engine's change key (null for listing-only records).

Sample dataset record

{
"record_id": "139402",
"event_type": "NEW_LISTING",
"scraped_at": "2026-09-08T09:15:32.117Z",
"is_new": true,
"source_url": "https://www.santafe.gov.ar/gestionesdecompras/site/gestion.php?idGestion=139402",
"data_source": "Gestiones de Compra - Gobierno de la Provincia de Santa Fe (santafe.gov.ar/gestionesdecompras), CC BY-SA 2.5 AR",
"idGestion": "139402",
"estado": "AP",
"tipoGestion": "CONTRATACIÓN DIRECTA",
"numeroGestion": "112",
"anioGestion": "2026",
"fechaHoraApertura": "22-09-2026",
"objeto": "ADQUISICIÓN DE INSUMOS DESCARTABLES Y MEDICAMENTOS PARA EL SERVICIO DE TERAPIA INTENSIVA",
"comprador": "HOSPITAL J. B. ITURRASPE",
"valorPliego": "NO APLICA",
"numeroExpediente": "",
"idGestionNumber": 139402,
"numeroAnio": "112-2026",
"tipoGestionCode": "T",
"tipoModalidad": "Sin Modalidad",
"idOrganismoGestion": "44",
"objetoCompleto": "ADQUISICIÓN DE INSUMOS DESCARTABLES Y MEDICAMENTOS PARA EL SERVICIO DE TERAPIA INTENSIVA DEL HOSPITAL J. B. ITURRASPE",
"destinos": null,
"fechaHoraAperturaFija": "2026-09-22 10:00:00",
"openingAt": "2026-09-22T13:00:00.000Z",
"openingDate": "2026-09-22",
"daysUntilOpening": 14,
"isOpeningInFuture": true,
"valorPliegoAmount": null,
"valorPliegoCurrency": null,
"valorPliegoIsFree": true,
"previousEstado": null,
"isElectronic": true,
"bidUrl": "https://gestionvirtual.santafe.gob.ar/#/bandeja_proveedores/create/form/68a1c2b3d4e5f6789abc0123?expedienteCode=EE-2026-00007912-APPSF-PE",
"printPdfUrl": "https://www.santafe.gov.ar/gestionesdecompras/site/output.php?a=gestiones.ver&idGestion=139402&print=1",
"documentsUrl": "https://www.santafe.gov.ar/gestionesdecompras/site/gestion.php?idGestion=139402&solodocs=1",
"detailFetched": true,
"detailError": null,
"estadoLabel": "PARA APERTURA",
"estadoStage": null,
"estadoFromDetail": "AP",
"publishedAtLocal": "05-09-2026 11:20 Hs.",
"publishedAt": "2026-09-05T14:20:00.000Z",
"publishedDate": "2026-09-05",
"daysSincePublished": 3,
"modalidad": "Sin Modalidad",
"alcance": "PROVINCIAL",
"descripcion": "Adquisición de insumos descartables y medicamentos para reposición de stock del servicio de Terapia Intensiva.",
"rubros": [
{ "rubro": "PRODUCTOS MEDICINALES Y FARMACEUTICOS", "subrubro": "MEDICAMENTOS", "raw": "PRODUCTOS MEDICINALES Y FARMACEUTICOS / MEDICAMENTOS" }
],
"rubroNames": ["PRODUCTOS MEDICINALES Y FARMACEUTICOS"],
"subrubroNames": ["MEDICAMENTOS"],
"organismoComitente": ["HOSPITAL J. B. ITURRASPE"],
"organismoLicitante": "HOSPITAL J. B. ITURRASPE",
"submissionPlace": "EL PROVEEDOR A EFECTOS DE LA PRESENTACIÓN DE SU OFERTA, DEBERÁ INGRESAR AL SIGUIENTE LINK: HTTPS://GESTIONVIRTUAL.SANTAFE.GOB.AR",
"submissionDeadlineLocal": "22-09-2026 10:00 Hs.",
"submissionDeadline": "2026-09-22T13:00:00.000Z",
"daysUntilDeadline": 14,
"openingPlace": "DIRECCIÓN DE COMPRAS DEL HOSPITAL J. B. ITURRASPE",
"openingAtDetailLocal": "22-09-2026 10:00 Hs.",
"openingNote": null,
"deliveryPlaceAndDate": "FARMACIA DEL HOSPITAL, DENTRO DE LOS 10 DÍAS DE NOTIFICADA LA ORDEN DE COMPRA",
"contactInfo": "(0342) 457-3357 - COMPRAS.ITURRASPE@SANTAFE.GOV.AR",
"contactEmails": ["compras.iturraspe@santafe.gov.ar"],
"contactPhones": ["(0342) 457-3357"],
"valorPliegoDetail": "NO APLICA",
"montoOriginalText": "$ 4.850.000,00",
"montoOriginalAmount": 4850000,
"montoOriginalCurrency": "ARS",
"expedientes": [
{ "label": "Expediente", "code": "EE-2026-00007912-APPSF-PE", "url": "https://www.santafe.gov.ar/expedientes-web/expediente-timbo/?anioTimbo=2026&numeroTimbo=00007912&tipoReparticion=APPSF&reparticionTimbo=PE&tipoTimbo=1&buscarTimbo=Buscar" }
],
"expediente": "EE-2026-00007912-APPSF-PE",
"expedienteUrl": "https://www.santafe.gov.ar/expedientes-web/expediente-timbo/?anioTimbo=2026&numeroTimbo=00007912&tipoReparticion=APPSF&reparticionTimbo=PE&tipoTimbo=1&buscarTimbo=Buscar",
"notes": [],
"documents": [
{ "kind": "pliego", "tipo": "Pliego", "nombre": "PLIEGO DE BASES Y CONDICIONES PARTICULARES", "url": "https://www.santafe.gov.ar/gestionesdecompras/descargar.php?m=anexo&id=172340&hash=3a7fbe11c0d2e6ab8f5c9d1e6a2b7c40&panel=0", "id": "172340" }
],
"documentCount": 1,
"documentKinds": ["pliego"],
"hasPliego": true,
"hasCircular": false,
"hasActaApertura": false,
"hasPreadjudicacion": false,
"hasAdjudicacion": false,
"hasOrdenProvision": false,
"hasCuadroComparativo": false,
"contentHash": "9e21f8b4c7a03d5e6f1b8290ac4d7e5f13b6c890"
}

A STATUS_CHANGE carries the same shape with "previousEstado": "AP" and "estado": "ET"; an UPDATED record carries "is_new": false and typically "hasCircular": true or a populated openingNote such as "(*** NUEVA FECHA ***)".

Multi-language Integration Snippets

cURL

curl -X POST "https://api.apify.com/v2/acts/stefano_seggio~santafe-compras-monitor/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"estados": ["AP", "ET"],
"rubro": "medicinales",
"onlyNew": true,
"maxItems": 300
}'

Python (apify-client)

from apify_client import ApifyClient
client = ApifyClient(token)
run = client.actor("stefano_seggio/santafe-compras-monitor").call(
run_input={
"estados": ["AP", "ET"],
"rubro": "medicinales",
"onlyNew": True,
"maxItems": 300,
}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(
item["event_type"],
item["numeroAnio"],
item["objeto"],
item["comprador"],
item["montoOriginalAmount"],
item["submissionDeadline"],
)

Node.js (apify-client)

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token });
const run = await client.actor('stefano_seggio/santafe-compras-monitor').call({
estados: ['AP', 'ET'],
rubro: 'medicinales',
onlyNew: true,
maxItems: 300,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems({ desc: true });
for (const tender of items) {
console.log(
tender.event_type,
tender.comprador,
tender.objeto,
tender.submissionDeadline,
tender.montoOriginalAmount,
);
}

Pricing Model Explanation

EventPriceWhat triggers it on this actor
result$0.003 per recordA record delivered with the full detail page fetched (fetchDetail: true, the default) — publication timestamp, budget (Monto Original), submission deadline, rubros, requesting organism, contact, expediente and the pliego/circular/acta/preadjudicación document links, plus the contentHash fingerprint.
result-summary$0.001 per recordA listing-only record — either fetchDetail: false (no extra page fetched, so no detail fields, no UPDATED detection and no status sweep for that record), or a process the site itself reports as not yet published (detailError: "UNPUBLISHED").
apify-actor-start$0.00005Once per run, regardless of how many records it delivers.

The two-tier result vs result-summary split maps directly to the fetchDetail input: it is a full detail-page fetch versus a listing-only summary, not an old-vs-new distinction. Turning fetchDetail off is the deliberate way to pull large volumes cheaply (e.g. an archive sweep for spending analysis) when you don't need documents, contact info or amendment detection.

When onlyNew: true is on, an unchanged process is never delivered and therefore never billed — it is not created as a result or result-summary event at $0, it is simply not emitted at all, because the delta engine recognizes it as already-known (same estado, same contentHash) and skips it. The only unconditional cost on a quiet monitoring run is the one-time apify-actor-start fee. Per the README's worked examples: a daily monitor of AP + ET finding roughly 8 new tenders and 4 amendments a day costs about $0.04/day (~$1/month); a 500-record filtered pull with detail costs about $1.50; a listing-only pull of the entire ~31,000-process archive costs about $31 (about $93 with full detail).


Written for the Apify Store listing of stefano_seggio/santafe-compras-monitor (Actor ID jfoq1flE7KqKb3qAb). All field names verified against this actor's own .actor/input_schema.json and .actor/dataset_schema.json; domain facts verified against README.md and CHANGELOG.md in the same repository.