DACH Residential White Pages & Reverse Phone Lookup
Independent tool. Trademarks referenced on this page are the property of their respective owners and are used only to identify the public website this tool reads. No affiliation or endorsement.
DACH Residential White Pages & Reverse Phone Lookup
Search Germany, Switzerland and Austria's national phone directories by name and city, or run a reverse phone lookup by number, across all three countries in a single actor. Returns full name, phone number (with E.164 formatting), mobile, street address, postal code, and district for residential and business listings, normalised into one schema regardless of which country a result came from.
DACH Phone Directory Scraper Features
- Searches by name, optionally narrowed to a city, across Germany, Switzerland and Austria in one run
- Runs reverse phone lookups on a German, Swiss or Austrian number — auto-detects the country from a
+49/+41/+43prefix, or searches every selected country when given a bare national number - Returns normalised phone numbers in both display and E.164 format, with mobile numbers split out separately
- Parses street address, postal code, city and district (German Stadtteil / Swiss canton) per listing
- Covers residential and business entries in one search — no separate mode needed
- Pick any combination of the three countries per run, or leave the default (all three) in place
Who Uses This Data?
- Skip tracing and process serving — locate a current address and phone number for a named individual before filing across DACH jurisdictions
- Debt recovery — cross-check a debtor's last known name against current directory listings in Germany, Switzerland or Austria
- Insurance claims — verify a claimant's address and phone against a public directory record
- B2C lead generation — build contact lists by name or region for German-speaking Europe outreach campaigns
- Reverse phone research — identify who's calling from an unknown German, Swiss or Austrian number
- Data enrichment — append name, address and phone fields to an existing DACH-region contact list
How It Works
- Choose a search mode — name search or reverse phone lookup.
- For a name search, give it a name and (optionally) a city. For a phone lookup, give it a number — include the country code (
+49/+41/+43) for a precise match when searching more than one country. - Pick which of the three countries to search via
countries— all three by default. - The actor returns every matched listing with contact details and address, paginating automatically up to your
maxItemslimit. - A name search with no city returns matches from anywhere in the selected country/countries — narrow it if you're only after one region.
Input
{
"searchMode": "name",
"countries": ["DE", "CH", "AT"],
"name": "Meier",
"city": "Berlin",
"maxItems": 50
}
| Field | Type | Default | Description |
|---|---|---|---|
searchMode |
String | name |
name (search by name, optionally narrowed by city) or phone (reverse phone lookup). |
countries |
Array | ["DE","CH","AT"] |
Which of Germany, Switzerland and Austria to search. Omit a country to skip it. |
name |
String | — | Name to search for — a surname or full name. Required for name mode. |
city |
String | — | City to narrow a name search, e.g. "Berlin". Optional — omit for nationwide results in each country. |
phone |
String | — | Phone number for a reverse lookup, e.g. "030 3134894" or "+43 1 4032202". Required for phone mode. |
maxItems |
Integer | 10 |
Maximum number of records to return. |
Reverse phone lookup example:
{
"searchMode": "phone",
"phone": "+43 1 4032202",
"maxItems": 5
}
Resuming a large crawl
Every run emits a resumeCursor in its Output. If a large crawl stops before it finishes — because it hit maxItems, your spend cap (maxTotalChargeUsd), or was aborted — start a new run with the same input plus that resumeCursor to continue from where it left off. The crawl resumes from the queued work the previous run didn't reach.
- You are not re-charged for records the earlier run already delivered.
- Resume within your account's run-retention window — on the free tier, roughly your 10 most recent runs. Once the source run is pruned, its
resumeCursoris no longer valid. resumeCursoris opaque — supply it unmodified.
Output Fields
{
"source_country": "DE",
"source_site": "dastelefonbuch.de",
"listing_id": "0001115703880",
"listing_type": "private",
"full_name": "Becker Sabine Meier Ingo",
"first_name": null,
"last_name": null,
"phone": "030 3 13 48 94",
"phone_e164": "+49303134894",
"mobile": null,
"street_address": "Pestalozzistr. 29",
"postal_code": "10627",
"city": "Berlin",
"district": "Charlottenburg",
"website": null,
"listing_url": "https://kontakt-1.dastelefonbuch.de/Berlin/Sabine-Becker-Ingo-Meier-Berlin-Pestalozzistr.html",
"query_term": "Meier",
"query_location": "Berlin",
"query_phone": null,
"result_rank": 1,
"scraped_at": "2026-09-20T15:23:20.077Z"
}
| Field | Type | Description |
|---|---|---|
source_country |
String | DE, CH, or AT — which country this listing is from. |
source_site |
String | The national directory the listing came from. |
listing_id |
String | The source's internal listing identifier. |
listing_type |
String | private or business. |
full_name |
String | Name as listed. |
first_name |
String | Given name, when the source separates it. null for German listings, which do not split names. |
last_name |
String | Family name, when the source separates it. null for German listings, which do not split names. |
phone |
String | Landline number as displayed, when the number is a landline. |
mobile |
String | Mobile number as displayed, when the number is a mobile. Mutually exclusive with phone. |
phone_e164 |
String | Phone number normalised to E.164, e.g. +49303134894. |
street_address |
String | Street address, when listed. |
postal_code |
String | Postal code, when listed. |
city |
String | City. |
district |
String | German Stadtteil (e.g. Charlottenburg) or Swiss canton (e.g. ZH), when the source exposes one. |
website |
String | Homepage link, when the listing includes one. Sparse — most listings don't carry one. |
listing_url |
String | Direct URL to the listing on its source site. |
query_term |
String | The name your search requested (name mode only). |
query_location |
String | The city your search requested (name mode only). |
query_phone |
String | The phone your search requested (phone mode only). |
result_rank |
Integer | Position of this listing within its search's result set. |
scraped_at |
String | ISO 8601 timestamp of when the record was collected. |
Data quality note: none of the three source directories expose fax number, email address, or geolocation on their search-results pages, so those fields are not part of the output. listing_type is source-verified for the Swiss and Austrian legs and inferred from a page-level marker for the German leg — all three are more reliable than a name-keyword guess, but treat them as best-effort rather than a guarantee on every row.
FAQ
How do I scrape German, Swiss and Austrian phone directories in one actor?
Give it a name (and optionally a city), or a phone number for a reverse lookup, and pick which of Germany, Switzerland and Austria to search via countries. It returns every matched listing with contact details and address — no account or API key needed.
How much does this actor cost to run?
Pricing follows Apify's pay-per-event model — see the Pricing tab on the actor page for the current rate per record. Results are paginated, so a broad name search across all three countries costs more than a narrow one scoped to a city.
Can I search for a name across a whole country?
Yes — omit city and a name search returns matches from anywhere in each selected country. Add a city to narrow it.
Does this actor cover business listings, or just residential?
Both. A single name search can return private and business entries together; listing_type on each record tells you which is which.
What happens if a reverse phone lookup finds no match?
The run finishes with zero records for that query — none of the selected countries has a listing for the number you searched.
How do I search only one country?
Set countries to a single value, e.g. ["CH"], and the actor queries only that country's directory.
Need More Features?
Need custom fields, filters, or a different target site? File an issue or get in touch.
Why Use This Scraper?
- Three countries, one schema — Germany, Switzerland and Austria normalised into the same field names, instead of running three separate actors and reconciling the output yourself.
- Reverse phone lookup as a first-class mode — not just name search, with automatic country detection from the number itself.
- Clean, structured output — consistent field names across every record, so you spend less time cleaning data and more time using it.
Further reading: People Search Data in Bulk: 14 Sources, What Each One Returns