FHIR Server Extractor avatar

FHIR Server Extractor

Pricing

from $0.35 / 1,000 resources

Go to Apify Store
FHIR Server Extractor

FHIR Server Extractor

Point at ANY HL7 FHIR R4 server (HAPI, SMART-on-FHIR, Azure/Google/AWS health APIs) and page any resource type (Patient, Observation, Condition, Encounter) into clean flat rows. Follows the Bundle next-link cursor, keeps the full resource in _raw. Discovery mode maps a server. Pay per record.

Pricing

from $0.35 / 1,000 resources

Rating

0.0

(0)

Developer

Datamule

Datamule

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

4 days ago

Last modified

Share

FHIR Server Extractor reads authorized HL7 FHIR R4 JSON endpoints, follows their Bundle next-link cursors, and emits one stable dataset row per matched resource. Use search mode to export resources or capabilities mode to inspect the resource types and search parameters a server advertises.

Try it now

This ready-to-run input requests up to 25 Patient resources from the public HAPI FHIR reference sandbox. HAPI is a shared test service, so its contents and availability can change. The records in this environment are synthetic test data, not production patient records.

{
"sources": ["https://hapi.fhir.org/baseR4"],
"mode": "search",
"resourceTypes": ["Patient"],
"maxRecords": 25
}
  1. Paste the JSON into the Actor's Input tab.
  2. Select Start.
  3. Open the default dataset to inspect or export the rows.

The same input can be sent through the Apify API, used in a scheduled task, or connected to an Apify integration. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

Representative output

SYNTHETIC Patient sample

The row below is generated from the retained HAPI fixture used by this Actor's local regression tests. It shows the exact stable row shape, including the source resource preserved in _raw. This is not a real patient record.

{
"_sourceServer": "https://hapi.fhir.org/baseR4",
"_resourceType": "Patient",
"_fhirVersion": "4.0.1",
"_serverSoftware": "HAPI FHIR",
"_mode": "search",
"_searchUrl": "https://hapi.fhir.org/baseR4/Patient?_count=25",
"resourceType": "Patient",
"id": "131896579",
"lastUpdated": "2026-04-10T15:55:37.648+00:00",
"meta_versionId": "1",
"meta_source": "#1SvhmbQgtkfxewf0",
"meta_profile": null,
"status": null,
"display": "Carlos Ramirez",
"supported_interactions": null,
"supported_search_params": null,
"software_name": null,
"software_version": null,
"_raw": {
"resourceType": "Patient",
"id": "131896579",
"meta": {
"versionId": "1",
"lastUpdated": "2026-04-10T15:55:37.648+00:00",
"source": "#1SvhmbQgtkfxewf0"
},
"identifier": [
{
"system": "urn:oid:1.2.36",
"value": "12345"
}
],
"name": [
{
"use": "official",
"family": "Ramirez",
"given": ["Carlos"]
}
],
"gender": "male",
"birthDate": "1975-03-02"
}
}

Fields that do not apply to the selected mode or resource are null; the Actor does not invent replacements.

How much does FHIR extraction cost?

The pay-per-event event is resource: $0.0005 per emitted resource. The default 25-row ceiling is $0.0125. The rate is $0.50 per 1,000 emitted resources. A run that emits fewer rows costs less; a valid zero-result run emits no billable resource events.

Apify infrastructure/compute charges are separate and may apply.

Emitted resourcesResource-event charge
0$0.00
25$0.0125
1,000$0.50

Inputs, defaults, and limits

maxRecords defaults to 25. The minimum is 1, and an explicit larger integer remains supported when a broader export is intentional. The cap applies across all sources and resource types in the run, not separately to each combination.

FieldRequiredDefault or prefillMeaning and limits
sourcesYesHAPI URL prefilledOne or more FHIR R4 base URLs. Use the base/root, not /Patient or /metadata.
modeNosearchsearch emits matched resources. capabilities reads /metadata and emits advertised resource types.
resourceTypesNo["Patient"]UpperCamelCase FHIR resource types. Used only in search mode.
searchParamsNoEmptyA JSON object applied to each requested resource type. _count is managed by the Actor. Parameter support is server- and resource-specific.
maxRecordsNo25Total emitted-row ceiling across the run. Minimum 1; set a larger value explicitly to override the trial cap.
bearerTokenNoEmptyOAuth2 bearer token for an already-authorized server. The Actor does not perform an OAuth login or token exchange.
extraHeadersNoEmptyAdditional request headers required by the server, such as a client identifier.

The Actor requests pages of up to 50 resources, follows each absolute link[relation=next] URL as returned, and stops at maxRecords. Source-side page limits, timeouts, authorization rules, Apify run limits, and a hard pagination safety guard still apply.

Output field dictionary

Both modes use the same stable set of columns. Search-only columns are null on capability rows, and capability-only columns are null on search rows.

FieldMeaning
_sourceServerFHIR base URL that produced the row.
_resourceTypeRequested or advertised resource type used for provenance.
_fhirVersionVersion reported by the server's CapabilityStatement, when available.
_serverSoftwareBest-effort software-family label, when detectable.
_modesearch or capabilities.
_searchUrlExact page URL that produced a search row; null in capabilities mode.
resourceTypeFHIR resource type represented by the row.
idFHIR logical ID; null for capability rows.
lastUpdatedResource meta.lastUpdated supplied by the server; may be null.
meta_versionIdResource meta.versionId, when supplied.
meta_sourceResource meta.source, when supplied.
meta_profileResource meta.profile canonical URLs, when supplied.
statusTop-level resource status, when that resource type has one.
displayBest-effort label from a name, title, or code display.
supported_interactionsCapability row's advertised interaction codes.
supported_search_paramsCapability row's advertised search-parameter names.
software_nameCapabilityStatement software name.
software_versionCapabilityStatement software version.
_rawOriginal resource or capability-resource object, capped for row-size safety.

Common use cases

  • Export a bounded, authorized FHIR R4 resource set for analysis or QA.
  • Inspect a server's advertised resource types and search surface before an integration is built.
  • Schedule an incremental extract with a supported _lastUpdated filter.
  • Compare normalized provenance fields across conformant R4 test or vendor endpoints while retaining each original resource in _raw.

Coverage, observation time, and freshness

The generic scope is FHIR R4 JSON: search responses shaped as FHIR Bundle resources and capability discovery through /metadata. It does not claim FHIR R5 support, Bulk Data $export, subscriptions, GraphQL, terminology expansion, or create/update/delete operations. Vendor profiles, supported resource types, search parameters, paging behavior, and authorization requirements vary even when the transport is R4-conformant.

HAPI FHIR and SMART-on-FHIR / Logica are public sandboxes containing synthetic test data. They demonstrate the common R4 grammar; they do not prove that a private vendor endpoint will allow the same searches or be available at the time of your run.

Each run is a bounded observation of what the server returned at that time:

  • lastUpdated is the server's resource-version timestamp, not the extraction time, and it may be absent.
  • The dataset deliberately has no invented observation timestamp. Use the Apify run start/finish metadata as the observation window.
  • The Actor does not impose a sort order. With maxRecords: 25, it keeps the first 25 matched rows in the server's response order, so the sample is not a completeness guarantee.
  • For incremental collection, schedule runs and pass a server-supported _lastUpdated search value. Deduplicate by source, resource type, logical ID, and version according to your own retention policy.
  • A capabilities row reflects the /metadata response observed during that run; server capabilities can change later.

Privacy and authorization limits

Use this Actor only with endpoints and data you are authorized to read. FHIR resources can contain protected health information. _raw retains the source resource, so downstream datasets and exports require the same access controls as the source data.

bearerToken is a secret input and is not intentionally logged. Treat extraHeaders, task inputs, datasets, and exported files as sensitive whenever they contain credentials or health data. Prefer private tasks and appropriate Apify security controls for non-public systems. This extraction utility does not grant permission, acquire consent, or by itself establish HIPAA or other regulatory compliance.

Troubleshooting

Wrong base URL

Supply the FHIR base/root, such as https://hapi.fhir.org/baseR4. Do not append a resource type or /metadata; the Actor adds those paths. A wrong base commonly produces HTTP 404, a non-JSON page, or “expected Bundle/CapabilityStatement.”

Authentication

HTTP 401 or 403 means the server did not accept the request. Provide a current bearerToken and any required extraHeaders, then confirm the token scopes permit the requested resource type and search. The Actor accepts an existing token but does not run a vendor OAuth flow.

OperationOutcome

FHIR can return an OperationOutcome even with HTTP 200. The Actor treats a top-level outcome as an error rather than an empty result and reports the first issue's severity, code, and diagnostics. Remove or correct unsupported searchParams; if every source fails, the run exits non-zero instead of presenting a false successful empty dataset.

Zero results

A valid search Bundle with no matching entries is a successful zero-result run. Check the resource type's exact casing, remove filters, confirm the server actually advertises the type with mode: "capabilities", and verify that your authorization permits matches. Included companions and outcome entries are filtered deliberately; only genuine matches are emitted.

For support, use the Actor's Issues tab with the base URL, mode, resource types, non-sensitive search parameters, and the relevant error text. Never post tokens, authorization headers, or patient data.