OData Service Extractor avatar

OData Service Extractor

Pricing

from $0.35 / 1,000 entities

Go to Apify Store
OData Service Extractor

OData Service Extractor

Point at ANY OData service (v2/v3/v4) — SAP, Dynamics 365, Business Central, Dataverse, SharePoint, national-stats & gov portals. Pick an entity set or auto-discover from $metadata; apply $filter/$select/$orderby/$expand; auto-paginate to flat rows + raw. Pay per row.

Pricing

from $0.35 / 1,000 entities

Rating

0.0

(0)

Developer

Datamule

Datamule

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

A generic "point at any OData service" scraper. OData (the OASIS query protocol) is the query language behind SAP, Microsoft Dynamics 365 / Business Central, Dataverse / Power Platform, SharePoint lists, and a huge number of national-statistics and open-government portals — yet there was no generic runner on the Store. Give this actor a service root URL, optionally pick an entity set (or let it auto-discover them from $metadata), apply the standard OData query options, and it pages the whole result set into clean, flat dataset rows plus a lossless raw object.

Works with all three OData JSON envelopes — v4 (@odata.*), v3 (odata.*) and legacy v2 verbose (d.results) — detected automatically from the response.

What it does

  • Extract an entity set — set the service root + entity set (e.g. Products, Customers, TypedDataSet) and it pulls every matching row, auto-following @odata.nextLink / odata.nextLink / __next pagination up to your Max results.
  • Auto-discover — leave the entity set empty and it reads $metadata, then extracts across all discovered sets (sharing the Max-results budget). Or turn on List entity sets only to just return the catalogue (name + entity type + items URL) without pulling data.
  • Query options$filter, $select, $orderby, $expand, $search, $top map to the matching fields. Anything else can go in Extra query parameters.
  • Flat + raw — each entity's scalar properties are spread to columns (OData annotations and v2 deferred navigation links stripped); the untouched entity is kept in raw, so nothing is lost even though every service has a different shape.

Example inputs

Northwind products (OData v4 demo):

{ "serviceRoot": "https://services.odata.org/V4/Northwind/Northwind.svc", "entitySet": "Products", "orderby": "UnitPrice desc", "maxResults": 100 }

Statistics Netherlands, a real government v3 service (no auth):

{ "serviceRoot": "https://opendata.cbs.nl/ODataApi/odata/83765NED", "entitySet": "TypedDataSet", "top": 100, "maxResults": 500 }

Filter + select:

{ "serviceRoot": "https://services.odata.org/V4/Northwind/Northwind.svc", "entitySet": "Products", "filter": "UnitPrice gt 20 and Discontinued eq false", "select": "ProductID,ProductName,UnitPrice" }

Discover what a service exposes:

{ "serviceRoot": "https://services.odata.org/V4/Northwind/Northwind.svc", "listEntitySetsOnly": true }

Authentication

None required for public services. For tenant-gated endpoints (Dynamics 365 / Business Central / Dataverse / SharePoint) supply a Bearer token and/or Extra request headers — both optional, never required, and the token is never logged.

Output

One dataset item per entity, with fixed meta columns:

  • _entitySet — the set the row came from.
  • _odataVersion — detected envelope version (v2 / v3 / v4).
  • _id — the entity's OData id / edit URL / v2 __metadata.uri (when present).
  • …plus every business property of the entity as its own column, and raw = the complete original object.

A query that matches nothing returns 0 items, not an error.

Pricing

Pay per row — you're charged one entity event per record returned (one per entity set in list-only mode). A query that matches nothing costs nothing.

Notes

  • Handles OData v2, v3 and v4; relative and absolute nextLinks; single-entity-by-key requests.
  • Not affiliated with or endorsed by OASIS, OData, Microsoft, SAP, or any target service.