# Hitta.se Swedish Person & Address Directory Scraper (`jungle_synthesizer/hitta-se-swedish-person-address-directory-scraper`) Actor

Search Sweden's hitta.se public person directory by name and get age, phone, and street address, plus municipality, county, and GPS coordinates, for private individuals. Built for debt-collection, tenant screening, insurance investigation, and B2C lead-list building.

- **URL**: https://apify.com/jungle\_synthesizer/hitta-se-swedish-person-address-directory-scraper.md
- **Developed by:** [BowTiedRaccoon](https://apify.com/jungle_synthesizer) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 record scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Hitta.se Swedish Person & Address Directory Scraper

Search Sweden's [hitta.se](https://www.hitta.se) private-person directory by name and return structured records with age, phone number, street address, postal code, municipality (kommun), county (län), GPS coordinates, and — where published — the other people registered at the same street address. hitta.se publishes this data under Sweden's utgivningsbevis (publishing licence) regime, which is why age and address are printed on a public results page with no login required.

***

### Why This Is Different From Other Hitta.se Scrapers

Every other hitta.se scraper on the Apify Store covers the **företag** (business) side of the directory — company listings, org numbers, B2B leads. None of them cover **personer** (private individuals). This actor is built specifically for the person index: name, age, address and household, not company data.

It also returns two fields no other Swedish directory scraper publishes at all — the person's **age** and their **co-registered household** (other private residents at the same street address, where published).

***

### Features

- Search by name, with an optional place name folded into the same query to narrow results (e.g. `"andersson uppsala"` instead of `"andersson"`)
- Returns age, phone (formatted + E.164), mobile, full street address, postal code, municipality, county, and latitude/longitude per person
- Returns co-registered household members (name + birth year) at the same address, where the source publishes them
- Every record carries the query that produced it and its rank/page position, so you can trace results back to a specific search
- Supports resuming a large run that stopped early, without re-paying for records you already have

***

### Who Uses Swedish Person Directory Data?

- **Debt collection (inkasso) and recovery teams** — locate a current address and household context for a named debtor
- **Insurance claims investigators** — verify a claimant's identity, age, and residence
- **Tenant and applicant screening** — cross-check a name against a published address and household
- **B2C list building and direct-mail targeting** — build name-and-address lists for a Swedish consumer audience

**Compliance note:** This actor surfaces publicly published Swedish population-register (folkbokföring) data. Using it to make decisions about, profile, or contact a named individual may be regulated activity in your own jurisdiction (for example under GDPR) even though the source publication is lawful in Sweden. You are responsible for confirming your use case is permitted where you operate.

***

### Input

```json
{
  "queries": ["andersson", "karlsson stockholm"],
  "maxItems": 10
}
```

| Field     | Type            | Default | Description |
|-----------|-----------------|---------|-------------|
| `queries` | array of strings | —       | **Required.** One or more search terms — a surname, a full name, or a name plus a city/municipality to narrow results (e.g. `"andersson uppsala"`). |
| `maxItems` | integer        | `10`    | **Required.** Maximum number of person records to return across all queries. |

***

### Output Fields

```json
{
  "person_id": "hdgM2XHGbk",
  "full_name": "Gun-Britt Andersson",
  "first_name": "Gun-Britt",
  "last_name": "Andersson",
  "age": 73,
  "street_address": "Halmbyboda 14",
  "postal_code": "741 77",
  "city": "Uppsala",
  "municipality": "Uppsala",
  "county": "Uppsala län",
  "phone": "070-577 21 59",
  "phone_e164": "+46705772159",
  "mobile": "070-577 21 59",
  "latitude": 59.88554491778794,
  "longitude": 17.774344619947314,
  "household_members": "Lennart Elfström (b. 1952)",
  "profile_url": "https://www.hitta.se/gun+britt+andersson/uppsala/person/hdgM2XHGbk",
  "query_term": "andersson uppsala",
  "result_rank": 1,
  "page_number": 1,
  "scraped_at": "2026-09-01T20:01:24.081Z"
}
```

| Field | Type | Description |
|-------|------|-------------|
| `person_id` | string | hitta.se's internal person identifier |
| `full_name` | string | Full display name |
| `first_name` | string | First name |
| `last_name` | string | Last name |
| `age` | integer | Age, where published (some listings hide age) |
| `street_address` | string | Street and house number |
| `postal_code` | string | Postal code, formatted `NNN NN` |
| `city` | string | City / postal town |
| `municipality` | string | Municipality (kommun) |
| `county` | string | County (län) |
| `phone` | string | Primary published phone number, formatted for display |
| `phone_e164` | string | Primary published phone number in E.164 format |
| `mobile` | string | Mobile number specifically, where distinguished from `phone` |
| `latitude` | number | Address latitude |
| `longitude` | number | Address longitude |
| `household_members` | string | Other private residents registered at the same street address (name and birth year), semicolon-separated. Empty when none are published |
| `profile_url` | string | Direct link to the person's hitta.se profile |
| `query_term` | string | The search term that produced this record |
| `result_rank` | integer | Position of this record within its query's result set |
| `page_number` | integer | Result page this record came from |
| `scraped_at` | string | ISO-8601 timestamp of when the record was delivered |

***

### 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 `resumeCursor` is no longer valid.
- `resumeCursor` is opaque — supply it unmodified.

***

### FAQ

#### How do I search for a person on hitta.se with this actor?

Set `queries` to one or more search terms — a surname alone, a full name, or a name plus a city (`"andersson uppsala"`) to narrow results — and set `maxItems`. Run the actor; it returns one record per matching person, up to `maxItems`.

#### Does it return everyone with that name, or just a sample?

It pages through the source's own result set for each query until `maxItems` is reached or the query is exhausted. Very common surnames searched alone can return tens of thousands of matches; adding a place name narrows the result set the same way it does on the site itself.

#### What is `household_members`?

Other private individuals registered at the same street address, where hitta.se publishes that information. It is not published for every address, so this field is often empty.

#### Why is `age` sometimes empty?

Some individuals have their age hidden on hitta.se. The actor returns whatever the source publishes and does not infer or estimate a missing value.

#### How much does this cost to run?

Pay-per-event pricing — you pay per person record returned. Exact per-event pricing is shown on the actor's Apify page before you run.

***

### Why Use This Scraper?

- **The only person-directory coverage of hitta.se** — every other actor on this source covers businesses, not private individuals
- **Age and household included** — fields no comparable Swedish or European people-directory scraper returns
- **Structured, schema-stable extraction** — records come from the source's own structured data rather than parsed page text, so results hold up across site redesigns
- **Resumable** — a large pull can pick up where it left off without duplicate charges

# Actor input Schema

## `sp_intended_usage` (type: `string`):

What will this data feed? E.g. lead lists, KYB checks, price tracking.

## `sp_improvement_suggestions` (type: `string`):

Provide any feedback or suggestions for improvements.

## `sp_contact` (type: `string`):

We'll personally help with your use case. No spam.

## `resumeCursor` (type: `string`):

Leave empty for a fresh crawl. To CONTINUE a previous run where it stopped — without paying again for records you already received — paste the `resumeCursor` value from that run's Output (the run's OUTPUT key). Resume promptly: the previous run's data expires with your account's retention window (free tier: your ~10 most recent runs).

## `maxItems` (type: `integer`):

Maximum number of person records to scrape across all queries.

## `queries` (type: `array`):

Name(s) to search on hitta.se private-person directory. Add a city or municipality to the term to narrow results, e.g. "andersson uppsala".

## Actor input object example

```json
{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "maxItems": 10,
  "queries": [
    "andersson",
    "karlsson stockholm"
  ]
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "maxItems": 10,
    "queries": [
        "andersson",
        "karlsson stockholm"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("jungle_synthesizer/hitta-se-swedish-person-address-directory-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "maxItems": 10,
    "queries": [
        "andersson",
        "karlsson stockholm",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("jungle_synthesizer/hitta-se-swedish-person-address-directory-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "maxItems": 10,
  "queries": [
    "andersson",
    "karlsson stockholm"
  ]
}' |
apify call jungle_synthesizer/hitta-se-swedish-person-address-directory-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jungle_synthesizer/hitta-se-swedish-person-address-directory-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/WBJk4NvNoznX5jRdG/builds/Q196gYLpYZ9bxk0va/openapi.json
