# Singapore Company Search: ACRA UEN Lookup & New Companies (`terracotta_hauyne/singapore-company-data-acra`) Actor

Singapore company data from ACRA's open data on data.gov.sg: UEN lookup, company name search, and lists of new companies by registration date, SSIC code, status, type or postal code. Address, SSIC, former names, officer count. No API key. Sole proprietors excluded by default. $2.50 per 1,000.

- **URL**: https://apify.com/terracotta_hauyne/singapore-company-data-acra.md
- **Developed by:** [Kevin](https://apify.com/terracotta_hauyne) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 entity saveds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Singapore Company Search: ACRA UEN Lookup & New Companies

Look up Singapore companies by **UEN**, search them **by name**, or list entities filtered by
**registration date, SSIC industry code, status, entity type, postal code or street**. Great for
lists of newly incorporated Singapore companies. The data is ACRA's open "Information on Corporate
Entities" register, published on **data.gov.sg**. You get the registered address, SSIC codes and
descriptions, company type, status, registration date, former names, audit firms and number of
officers.

**No API key, no login, no proxies.** **$2.50 per 1,000 entities**, every field included.

- **Open government data, no scraping.** The actor reads ACRA's datasets through the public
  data.gov.sg Datastore API, so you get stable, structured JSON.
- **One search covers all 27 ACRA datasets.** They are split by first letter; results are merged and
  sorted, so "newest first" really is newest across the whole register.
- **Personal data minimised by default.** Sole proprietorships and partnerships, which are often named
  after their owners, are excluded unless you switch them on.
- **Commercial use allowed** under the Singapore Open Data Licence. Attribution is included in every item.

Not affiliated with or endorsed by ACRA, GovTech or data.gov.sg.

### How to use

1. Click **Start**. The prefilled input looks up three well-known UENs (Singapore Airlines, DBS Bank,
   Grab) and finishes in about a minute.
2. Fill in **one** of the inputs below, or combine them.
3. Run, then export the dataset as CSV, Excel or JSON, or connect it to your CRM via the Apify API.

**Example 1: UEN lookup** (KYB, supplier checks, CRM enrichment). Spaces and dashes are ignored, and
up to 50 UENs share one API request per dataset:

```json
{
  "uens": ["197200078R", "196800306E", "201731650K"]
}
```

**Example 2: Singapore company search by name.** Live companies whose name contains "robotics", newest first:

```json
{
  "searchQueries": ["robotics"],
  "entityTypes": ["Local Company"],
  "liveOnly": true,
  "maxResults": 200
}
```

**Example 3: new companies list** (lead generation). Software companies (SSIC 62011) incorporated in
September 2026 that are still live:

```json
{
  "registeredFrom": "2026-09-01",
  "registeredTo": "2026-09-30",
  "ssicCodes": ["62011"],
  "liveOnly": true,
  "maxResults": 1000
}
```

Each item is one entity. The run's `OUTPUT` record (key-value store) summarises lookups found, not
found and excluded, total matches per search, API requests, and whether your maximum cost per run
stopped the run early.

### What data do you get?

| Field | Example |
|---|---|
| `uen` | 202645000E |
| `entityName` | SURGE ROBOTICS PTE. LTD. |
| `entityType` | Local Company / Foreign Company Branch / Limited Liability Partnership / Limited Partnership / Sole Proprietorship/ Partnership |
| `companyType` | Private Company Limited by Shares |
| `entityStatus`, `isLive` | Live Company, true |
| `registrationIncorporationDate`, `uenIssueDate` | 2026-09-29 |
| `address` (+ `block`, `streetName`, `levelNo`, `unitNo`, `buildingName`, `postalCode`) | 10 ANSON ROAD, #22-02, INTERNATIONAL PLAZA, SINGAPORE 079903 |
| `ssicCodes`, `primarySsicCode`, `primarySsicDescription`, `secondarySsic…` | 62011 |
| `primaryUserDescribedActivity` | Free-text activity, when given |
| `accountDueDate`, `annualReturnDate` | 2027-10-31 |
| `numberOfOfficers` | 6 (a count only; no officer names are published) |
| `formerNames`, `auditFirms` | up to 15 former names; audit firm UEN + name |
| `sourceDataset`, `sourceDatasetId`, `sourceDatasetUrl` | ACRA Information on Corporate Entities ('S') |
| `containsPersonalData` | true only for sole proprietorships / partnerships |
| `retrievedAt`, `source`, `attribution`, `licenceUrl` | licence attribution notice |

Missing values (`na` in the source) are output as `null`. SSIC descriptions come from the source
dataset itself. They are often empty for recent registrations, but the code is always there.

### Input

| Field | What it does |
|---|---|
| `uens` | UEN lookup. Filters do not apply to lookups, except *Exclude sole proprietorships*. |
| `searchQueries` | Name search: all words must appear in the entity name (whole words, any order). |
| `entityTypes`, `liveOnly`, `entityStatuses` | Type and status filters (exact ACRA values). |
| `registeredFrom`, `registeredTo` | Registration / incorporation date range. |
| `ssicCodes`, `postalCodes`, `streetName` | Primary SSIC code (5 digits), exact postal code, words in the street name. |
| `excludeSoleProprietorships` | Default **on**. See "Personal data" below. |
| `sortBy` | `newest` (default), `oldest`, `name`. |
| `maxResults` | Default 100; 0 = no limit other than your maximum cost per run. |
| `apiKey`, `requestsPerTenSeconds` | Optional data.gov.sg API key for a higher rate limit, and pacing. |

Filters are combined with AND. Without a name search, filters alone list every matching entity.

### Pricing

**$0.0025 per entity saved ($2.50 per 1,000).** No other charges by the actor. Only Apify's standard
dataset-item event is used. The actor respects your **maximum cost per run**: it stops fetching when
the limit is reached and never saves (or charges) more items than the limit allows.

| Entities | Price |
|---|---|
| 100 | $0.25 |
| 1,000 | $2.50 |
| 10,000 | $25 |

### Speed

data.gov.sg allows 4 requests per 10 seconds without a key. The actor makes 3 (one every 3.3 s) to
stay polite on shared servers. Approximate times:

- UEN lookups: 1–27 requests per batch of 50 UENs (stops as soon as all are found), so about 5–90 s.
- Name or filter search: about 27 requests to start (one per dataset), then up to 1,000 entities per
  further request. About 90 s for the first results, then roughly 3 s per 1,000 entities.
- Date ranges longer than one year cost about 27 requests per year.

With a free data.gov.sg API key (input `apiKey`), the actor runs about twice as fast.

### Use cases

- **Lead generation:** newly incorporated companies by industry (SSIC) and area (postal code, street).
- **KYB / supplier onboarding:** check that a UEN exists, is live, and matches the name and address.
- **CRM enrichment:** add UEN, status, SSIC and address to your Singapore accounts.
- **Market research:** count and track companies by industry, type and incorporation year.

### Licence and attribution

The data is from the **ACRA Information on Corporate Entities** collection on data.gov.sg
(https://data.gov.sg/collections/2/view), published under the **Singapore Open Data Licence v1.0**
(https://data.gov.sg/open-data-licence). The licence states:

> "You can use, access, download, copy, distribute, transmit, modify and adapt the datasets, or any
> derived analyses or applications, whether commercially or non-commercially"

> "You may grant a sub-licence of the datasets if this is necessary to enable users of your application
> and/or website \[…] to use your application or access your website."

It also requires "a conspicuous notice acknowledging the source of the datasets and including a link
to the most recent version of this Licence". Every item and the run summary contain that notice, for example:

> Contains information from ACRA Information on Corporate Entities accessed on 2026-10-31 from
> data.gov.sg which is made available under the terms of the Singapore Open Data Licence version 1.0
> (https://data.gov.sg/open-data-licence)

Keep it when you republish the data. The licence also says you must not suggest any official status or
endorsement by the Agency, and it grants **no rights over personal data** in the datasets.

### Personal data

The register has no officer names, ID numbers or birth dates. But **sole proprietorships and
partnerships** are often registered under the owner's own name, and the licence explicitly excludes
personal data. So:

- They are **excluded by default** (`excludeSoleProprietorships: true`). They are filtered on the server,
  so they cost you nothing.
- If you turn them on, those items carry `containsPersonalData: true`. You are responsible for having a
  lawful purpose under Singapore's PDPA (and the GDPR, if it applies to you), e.g. for KYB checks.
- Do not use this data for unsolicited marketing to individuals.

### FAQ

**How fresh is the data?** ACRA updates the datasets monthly (the last update before this release was
2026-10-14). Registrations from the last few weeks may not be included yet. For a certified, real-time
business profile, buy it from ACRA's Bizfile.

**Does it include directors or shareholders?** No. The open dataset has only the number of officers.
Directors, shareholders and financial statements are paid Bizfile products and are not available here.

**Why was my UEN not found?** The collection covers entities registered with ACRA. UENs issued by other
agencies (societies, charities and similar, often starting with T or S plus two digits) are not in it.
Check the `OUTPUT` record: `lookups.notFound`. Sole proprietorships are listed in
`lookups.excludedSoleProprietorships` unless you turn the exclusion off.

**Why did a name search miss a company?** The search matches whole words (data.gov.sg full-text search),
so part of a word, like "grab" for "GRABFOOD", may not match. Add the full word (e.g. `grabfood`) as a
separate search, or look the company up by UEN.

**Do I need a data.gov.sg account or API key?** No. A free key (sign in on data.gov.sg → API keys)
only makes big runs faster.

**What if data.gov.sg is rate limiting?** The actor waits and retries automatically (429 back-off). If
the limit is still hit after several waits, the run stops with a clear message, and the entities saved so
far are kept.

**Are SSIC descriptions for every code included?** Only the descriptions in the ACRA dataset itself,
which are sometimes empty. We do not add a separate SSIC code list.

### Changelog

- **1.0** (2026-10-31): first release. UEN lookup, name search, filters, merged sorting across all
  27 datasets, sole-proprietorship exclusion, pay-per-event pricing.

# Actor input Schema

## `uens` (type: `array`):

Look up entities by Unique Entity Number (UEN), e.g. 197200078R. Spaces and dashes are ignored. Only UENs issued by ACRA (companies, LLPs, LPs, foreign company branches, businesses) are in the source data. Filters below do not apply to lookups, except 'Exclude sole proprietorships'.

## `searchQueries` (type: `array`):

Find entities whose name contains all these words (whole words, any order, case-insensitive), e.g. 'robotics' or 'logistics holdings'. All 27 ACRA datasets are searched (about 27 API requests per search). The filters below are applied too.

## `entityTypes` (type: `array`):

Only these entity types. Empty = all (sole proprietorships only if 'Exclude sole proprietorships' is off).

## `liveOnly` (type: `boolean`):

Only entities with status 'Live Company' or 'Live' (registered businesses). Added to 'Entity statuses' if both are set.

## `entityStatuses` (type: `array`):

Only entities with one of these exact ACRA statuses.

## `registeredFrom` (type: `string`):

Registration or incorporation date on or after this date (YYYY-MM-DD). The source is updated monthly by ACRA, so the latest weeks may be missing. Each year in the range costs about 27 API requests.

## `registeredTo` (type: `string`):

On or before this date (YYYY-MM-DD). Default: today.

## `ssicCodes` (type: `array`):

5-digit Singapore Standard Industrial Classification codes of the primary activity, e.g. 62011 (software development), 56111 (restaurants), 64202 (investment holding).

## `postalCodes` (type: `array`):

Exact 6-digit Singapore postal codes of the registered address, e.g. 018989.

## `streetName` (type: `string`):

Words in the registered street name, e.g. 'ang mo kio' or 'cecil street'.

## `excludeSoleProprietorships` (type: `boolean`):

On by default (personal-data minimisation). Sole proprietorships and partnerships are often named after their owners, and the Singapore Open Data Licence grants no rights over personal data. Turn off only if you have a lawful purpose; those items are marked containsPersonalData = true.

## `sortBy` (type: `string`):

Order of search results across all 27 datasets. With a date range longer than one year, results are sorted within each year.

## `maxResults` (type: `integer`):

Stop after this many entities (each entity is one result). 0 = no limit other than your maximum cost per run.

## `apiKey` (type: `string`):

Optional. Without a key the actor uses the public rate limit (4 requests per 10 seconds; the actor makes 3), which is fine for lookups and searches up to a few thousand results. A free key from data.gov.sg (sign in → API keys) raises the limit to 8 (development) or 20 (production) requests per 10 seconds. The key is stored encrypted and sent only to data.gov.sg.

## `requestsPerTenSeconds` (type: `integer`):

Pacing. Default 3 without a key, 7 with a key. Set up to 20 only with a production key.

## Actor input object example

```json
{
  "uens": [
    "197200078R",
    "196800306E"
  ],
  "searchQueries": [
    "robotics"
  ],
  "liveOnly": false,
  "ssicCodes": [
    "62011"
  ],
  "excludeSoleProprietorships": true,
  "sortBy": "newest",
  "maxResults": 100
}
```

# Actor output Schema

## `entities` (type: `string`):

One item per Singapore entity saved (default dataset).

## `summary` (type: `string`):

Run summary: lookups found/not found/excluded, searches, API request count, charge-limit status, attribution.

# 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 = {
    "uens": [
        "197200078R",
        "196800306E",
        "201731650K"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("terracotta_hauyne/singapore-company-data-acra").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 = { "uens": [
        "197200078R",
        "196800306E",
        "201731650K",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("terracotta_hauyne/singapore-company-data-acra").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 '{
  "uens": [
    "197200078R",
    "196800306E",
    "201731650K"
  ]
}' |
apify call terracotta_hauyne/singapore-company-data-acra --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,terracotta_hauyne/singapore-company-data-acra"
        }
    }
}
```

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/IG5Gi0W5u7pl2jfdP/builds/uZfcEnLYRoP1lBRk1/openapi.json
