API and schemas
Run any tool from code on Apify's API with your own token - real endpoints, a real response, and no key of mine in the way.
There is no Lowland Data API key, and no Lowland Data
endpoint.
Tools run on Apify's API, on your own account, with your own
token. That means the rate limits, the uptime and the billing are Apify's published
ones rather than promises from me - and if I disappeared tomorrow, your integration
would keep working.
Run a tool and get rows back
One call. It blocks until the run finishes and returns the dataset items directly - the shape most integrations want.
curl -X POST \
"https://api.apify.com/v2/acts/lowlanddata~kleinanzeigen-scraper/run-sync-get-dataset-items" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"searchQuery": "fahrrad", "maxItems": 50}'
What comes back
A JSON array, one object per result. A real row from a recent run of kleinanzeigen-scraper:
{
"adType": "offer",
"attributes": {},
"description": "[contact removed] > Probleme mit Ihrem Bosch, VanMoof, Panasonic, Yamaha oder BionX-Akku? > Ob Wartung, Kapazitätstest oder Reparatur – wi...",
"imageUrl": "https://img.kleinanzeigen.de/api/v1/prod-ads/images/b1/b1acf8ca-5f17-49e8-8535-202d5166edb5?rule=$_2.AUTO",
"listingId": "3374230117",
"location": "80796 Schwabing-West",
"priceCents": 6900,
"priceType": "NEGOTIABLE",
"shippingPossible": true,
"title": "✅E-Bike Akku Zellentausch| Bosch VanMoof Panasonic Yamaha BionX",
"url": "https://www.kleinanzeigen.de/s-anzeige/-e-bike-akku-zellentausch-bosch-vanmoof-panasonic-yamaha-bionx/3374230117-217-6462"
}
Every field a given tool returns is documented on its own page in the catalogue, with the type and meaning of each - that is the data dictionary, one per tool, because the fields differ by source.
Start a run without waiting
For anything long enough to outlive an HTTP request: start it, then collect the dataset when it finishes.
# start
curl -X POST "https://api.apify.com/v2/acts/lowlanddata~kleinanzeigen-scraper/runs" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"searchQuery": "fahrrad", "maxItems": 5000}'
# -> { "data": { "id": "RUN_ID", "defaultDatasetId": "DATASET_ID", ... } }
# collect
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?format=json" \
-H "Authorization: Bearer $APIFY_TOKEN"
Python
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("lowlanddata/kleinanzeigen-scraper").call(
run_input={"searchQuery": "fahrrad", "maxItems": 50}
)
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row["title"], row["priceCents"])
Schedules, webhooks and incremental runs
Runs can be scheduled on the platform, and a webhook can fire when one finishes, so
a daily pull needs no cron of your own. Several tools also take
onlyNewListings (or onlyNewJobs), which remembers what a
previous run delivered - in a store on your account - and returns only what
appeared since. Rows skipped that way are not charged. The tool pages say which
tools support it.
Rate limits, uptime and backfill
Rate limits and platform availability are Apify's and are documented in their API reference - I do not run a gateway in front of them and will not quote numbers I do not control. What I do publish is the record of whether each tool still returns data: the status pages carry every run, failures included. Historical backfill is not something a tool can do - it reads what a site shows today - which is precisely why the long-run series exist and are being accumulated daily.
Other ways in
MCP endpoints for AI agents and n8n community nodes are on the integrations page. Pricing is per result, metered by the platform.
Page generated 2026-09-20 10:51 UTC. The sample row above comes from a real run and is refreshed with the catalogue.