# Singapore Patents Scraper: Applicants & Classifications (`scrapers_lat/singapore-patents-scraper`) Actor

Scrape Singapore (SG) patents: publication and application numbers, title, abstract, applicant/owner company, inventors, priority/filing/publication dates, legal status and CPC classifications. Filter by keyword, company, inventor and grant status. Export to JSON, CSV or Excel.

- **URL**: https://apify.com/scrapers\_lat/singapore-patents-scraper.md
- **Developed by:** [Scrapers Lat](https://apify.com/scrapers_lat) (community)
- **Categories:** Lead generation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.20 / 1,000 results

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

[![Singapore Patents Scraper: Applicants & Classifications](https://scrapers.lat/banners/singapore-patents-scraper.png)](https://console.apify.com/actors/qaEEHaMe3rAn8RqIi/input)

## Singapore Patents Scraper: Applicants & Classifications

Here is one real result, with every field the actor returns:

```json
{
  "publicationNumber": "SG10202105209QA",
  "applicationNumber": "SG10202105209QA",
  "title": "Vertical memory device",
  "abstractText": "CLAIMS WHAT IS CLAIMED IS: 1. A vertical memory device comprising: a plurality of word lines on a substrate, the plurality of word lines extending in a horizontal direction that is parallel to a main surface of the substrate, the plurality of word lines stacked in a vertical direction; a plurality &hellip;",
  "country": "SG",
  "assignee": "Samsung Electronics Co Ltd",
  "currentAssignee": "Samsung Electronics Co Ltd",
  "applicants": ["Samsung Electronics Co Ltd", "Macronix International Co., Ltd.", "Nanya Technology Corporation", "Intel Corporation", "Sandisk Technologies Llc"],
  "applicantsCount": 13,
  "inventor": "Shin Dongha",
  "inventors": ["Shin Dongha", "Jeong Jeawon", "Lim Bongsoon"],
  "inventorsCount": 3,
  "priorityDate": "2020-05-21",
  "filingDate": "2021-05-18",
  "publicationDate": "2021-12-30",
  "legalStatus": null,
  "cpcClassifications": ["H10W", "H10W20/00", "H10W20/40", "H10W20/41", "H10B41/00", "H10B41/10", "H10B43/00", "H10B43/20", "H10B43/23"],
  "topClassification": "H10W",
  "classificationsCount": 20,
  "pdfUrl": null,
  "googlePatentsUrl": "https://patents.google.com/patent/SG10202105209QA/en",
  "matchedQuery": "semiconductor",
  "source": "Google Patents",
  "observedAt": "2026-08-10T14:35:31.530Z"
}
```

The `applicants` and `cpcClassifications` arrays above are trimmed for length (13 and 20 entries in the real record); all shown values are real and unaltered. `abstractText` keeps the source `&hellip;` ellipsis entity exactly as returned.

The most complete Singapore patents scraper available. It returns every field the Singapore (SG) patent record exposes, including publication and application numbers, applicant and assignee (the owning company), the full inventor list, priority, filing and publication dates, legal status and CPC/IPC technology classifications, plus derived counts, and gives you five filters to target exactly the patents you need.

**📥 [Input](https://apify.com/scrapers_lat/singapore-patents-scraper/input-schema) · 📤 [Output](https://apify.com/scrapers_lat/singapore-patents-scraper/output-schema) · 💰 [Pricing](https://apify.com/scrapers_lat/singapore-patents-scraper/pricing) · ▶️ [Examples](https://apify.com/scrapers_lat/singapore-patents-scraper/examples)**

![Apify](https://img.shields.io/badge/Platform-Apify-1CE1CE?logo=apify\&logoColor=white)
![Coverage](https://img.shields.io/badge/Coverage-Singapore-blue)
![Output](https://img.shields.io/badge/Output-JSON%20%7C%20CSV%20%7C%20Excel-orange)
![Billing](https://img.shields.io/badge/Billing-Pay%20per%20result-brightgreen)

### Table of contents

- [What it does](#what-it-does)
- [Quickstart](#quickstart)
- [Input reference](#input-reference)
- [Output reference](#output-reference)
- [Example output record](#example-output-record)
- [Run via API and CLI](#run-via-api-and-cli)
- [Fetch results](#fetch-results)
- [Billing and limits](#billing-and-limits)
- [FAQ and troubleshooting](#faq-and-troubleshooting)

### What it does

The actor searches Singapore (SG) patent publications for each keyword and filter you pass, collects the matching patents newest first, and writes one normalized record per patent to the run's dataset. With full details enabled, each patent is enriched from its detail page with the application number, the complete applicant and inventor lists, CPC/IPC technology classifications, a PDF link and a longer abstract. Duplicate publications are removed across keywords and pages, missing source values are returned as `null`, and derived counts (`applicantsCount`, `inventorsCount`, `classificationsCount`) plus a `topClassification` are computed for faster analysis.

### Quickstart

Open the actor, paste this into the input, and press Run. It returns up to 10 recent Singapore semiconductor patents with full details.

```json
{
  "keywords": ["semiconductor"],
  "includeDetails": true,
  "maxPatents": 10
}
```

Every input field is optional. Leave `keywords` empty to return the newest Singapore patents with no keyword filter.

### Input reference

| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| `keywords` | string\[] | no | (empty) | One or more keywords or phrases matched against title, abstract and full text. Each keyword runs as a separate search. Empty returns the newest Singapore patents. |
| `assignee` | string | no | (empty) | Only return patents owned by or applied for by this company or organization, for example `DSO National Laboratories`, `Grab`, `Sea Limited`. |
| `inventor` | string | no | (empty) | Only return patents naming this inventor. |
| `status` | enum | no | `ANY` | Grant status. One of `ANY`, `GRANT` (granted patents only), `APPLICATION` (pending applications only). |
| `filedAfter` | string | no | (empty) | Only patents with a priority date on or after this date (`YYYY-MM-DD`). |
| `filedBefore` | string | no | (empty) | Only patents with a priority date on or before this date (`YYYY-MM-DD`). |
| `includeDetails` | boolean | no | `true` | When on, each patent is enriched with its application number, full inventor and applicant lists, CPC/IPC classifications, PDF link and a longer abstract. Turn off for a faster, lighter run. |
| `maxPatents` | integer | no | `10` | Maximum number of patents to collect across all keywords. |

Filters combine with logical AND. `includeDetails` enrichment is billed additively per enriched record (see Billing).

### Output reference

One dataset item per patent. Types: `string`, `integer`, `string[]`, or `null` when the source value is absent.

| Field | Type | Description |
|---|---|---|
| `publicationNumber` | string | Singapore publication number, for example `SG10202105209QA`. |
| `applicationNumber` | string | Application number (from the detail page), or `null`. |
| `title` | string | Patent title. |
| `abstractText` | string | Abstract or snippet text. Source HTML entities such as `&hellip;` are preserved as returned. |
| `country` | string | Always `SG`. |
| `assignee` | string | Applicant or assignee (owning company) from the search result. |
| `currentAssignee` | string | Current assignee from the detail page. |
| `applicants` | string\[] | Full applicant list from the detail page. |
| `applicantsCount` | integer | Number of applicants. |
| `inventor` | string | Primary inventor. |
| `inventors` | string\[] | Full inventor list. |
| `inventorsCount` | integer | Number of inventors. |
| `priorityDate` | string | Earliest priority (filing) date (`YYYY-MM-DD`). |
| `filingDate` | string | Filing date (`YYYY-MM-DD`). |
| `publicationDate` | string | Publication date (`YYYY-MM-DD`). |
| `legalStatus` | string | Singapore legal status (`Active`, `Not active`), or `null` if unknown. |
| `cpcClassifications` | string\[] | CPC/IPC technology classification codes. |
| `topClassification` | string | First (top) classification code, or `null`. |
| `classificationsCount` | integer | Number of classification codes. |
| `pdfUrl` | string | Link to the patent PDF, or `null`. |
| `googlePatentsUrl` | string | Public patent detail URL. |
| `matchedQuery` | string | The keyword that matched this patent, or `null` for the broad newest query. |
| `source` | string | Always `Google Patents`. |
| `observedAt` | string | ISO 8601 timestamp of when the record was collected. |
| `error` | string | Present only when no patents match or the source is unreachable: a single non-billable diagnostic item is written instead of results. |

### Example output record

Real record from a live run (input `{"keywords": ["semiconductor"], "maxPatents": 10}`):

```json
{
  "publicationNumber": "SG10202105209QA",
  "applicationNumber": "SG10202105209QA",
  "title": "Vertical memory device",
  "country": "SG",
  "assignee": "Samsung Electronics Co Ltd",
  "currentAssignee": "Samsung Electronics Co Ltd",
  "applicantsCount": 13,
  "inventor": "Shin Dongha",
  "inventors": ["Shin Dongha", "Jeong Jeawon", "Lim Bongsoon"],
  "inventorsCount": 3,
  "priorityDate": "2020-05-21",
  "filingDate": "2021-05-18",
  "publicationDate": "2021-12-30",
  "legalStatus": null,
  "topClassification": "H10W",
  "classificationsCount": 20,
  "googlePatentsUrl": "https://patents.google.com/patent/SG10202105209QA/en",
  "matchedQuery": "semiconductor",
  "source": "Google Patents",
  "observedAt": "2026-08-10T14:35:31.530Z"
}
```

### Run via API and CLI

Start a run and wait for it to finish, then read the dataset. Replace `<TOKEN>` with your Apify API token.

Run synchronously and get dataset items in one call:

```bash
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~singapore-patents-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"keywords":["semiconductor"],"status":"GRANT","includeDetails":true,"maxPatents":25}'
```

Start a run asynchronously:

```bash
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~singapore-patents-scraper/runs?token=<TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"assignee":"Grab","maxPatents":100}'
```

Apify CLI:

```bash
apify call scrapers_lat/singapore-patents-scraper \
  --input '{"keywords":["battery"],"filedAfter":"2021-01-01","maxPatents":50}'
```

### Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing `format`:

```bash
## JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"

## CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"

## Paginate large datasets
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"
```

`<DATASET_ID>` is returned as `defaultDatasetId` in the run object. Use `offset` and `limit` to page through large result sets. `clean=true` drops empty and internal fields.

### Billing and limits

- **Pay per result.** You are charged per patent returned (`result` event). See the [pricing tab](https://apify.com/scrapers_lat/singapore-patents-scraper/pricing) for the current per-result price.
- **Full-details add-on.** When `includeDetails` is on, each patent that gains real detail-page enrichment charges a small additional `details` event. Turn `includeDetails` off to avoid it.
- **No charge on failure.** If no patents match or the source is unreachable, the actor writes a single non-billable diagnostic item with a populated `error` field. Empty runs cost nothing.
- **Spend cap respected.** Set `maxTotalChargeUsd` on the run; once reached, the actor stops emitting and charging further billable results.
- **Free Apify plans** are capped at 10 records per run. Upgrade for higher `maxPatents`.

### FAQ and troubleshooting

**A run returned no patents. Why?**
The keyword and filters matched nothing. Try a broader keyword, remove the date range, or check the applicant/inventor spelling. Zero-result runs are not charged.

**What does the applicant/assignee field represent?**
The corporate owner of the patent. Use `assignee` in the input to pull every Singapore patent owned by one company.

**How do I get only granted patents?**
Set `status` to `GRANT`. Use `APPLICATION` for pending applications only.

**Why is `legalStatus` null?**
Singapore stage data was not available or was reported as unknown for that family. Missing source values are returned as `null`, never invented.

**What do the classification codes mean?**
They are CPC/IPC technology classifications. `topClassification` is the primary code and `classificationsCount` is the total, useful for grouping patents by technology area.

**Is this an official patent office tool?**
No. This actor is independent and has no affiliation with IPOS, Google, or any patent office. It reads only publicly available patent data. Use the results in accordance with the source's terms.

### Related scrapers

- [Canada CIPO IP Scraper](https://apify.com/scrapers_lat/canada-cipo-ip-scraper): Canadian patents and trademarks.
- [EUIPO Trademarks Scraper](https://apify.com/scrapers_lat/euipo-trademarks-scraper): EU trademark registrations.
- [INDECOPI Trademarks Scraper](https://apify.com/scrapers_lat/indecopi-trademarks-scraper): Peru trademark records.

### More scrapers at scrapers.lat

Built and maintained by [scrapers.lat](https://scrapers.lat), where we publish scrapers for public platforms: company registries, intellectual property, government data, finance and more. Browse the catalog or request a custom scraper at [scrapers.lat](https://scrapers.lat).

***

> Independent tool, not affiliated with IPOS, Google, or any patent office. Accesses only publicly available patent data. Use the results in accordance with the source's terms.

# Actor input Schema

## `keywords` (type: `array`):

One or more keywords or phrases to search Singapore patents (title, abstract and full text). Each keyword runs as a separate search. Leave empty to return the newest Singapore patents.

## `assignee` (type: `string`):

Optional. Only return patents owned by or applied for by this company or organization (for example 'DSO National Laboratories', 'Grab', 'Sea Limited'). This is the corporate owner of the patent.

## `inventor` (type: `string`):

Optional. Only return patents naming this inventor.

## `status` (type: `string`):

Filter by grant status: only granted patents, only pending applications, or any.

## `filedAfter` (type: `string`):

Optional. Only patents with a priority (earliest filing) date on or after this date. Format YYYY-MM-DD (for example 2021-01-01).

## `filedBefore` (type: `string`):

Optional. Only patents with a priority (earliest filing) date on or before this date. Format YYYY-MM-DD.

## `includeDetails` (type: `boolean`):

When on, each patent is enriched with its application number, full inventor and applicant list, CPC/IPC technology classifications, PDF link and a longer abstract. Turn off for a faster, lighter run.

## `maxPatents` (type: `integer`):

Maximum number of patents to collect across all keywords.

## Actor input object example

```json
{
  "keywords": [
    "semiconductor"
  ],
  "status": "ANY",
  "includeDetails": true,
  "maxPatents": 10
}
```

# 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 = {
    "keywords": [
        "semiconductor"
    ],
    "maxPatents": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapers_lat/singapore-patents-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 = {
    "keywords": ["semiconductor"],
    "maxPatents": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("scrapers_lat/singapore-patents-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 '{
  "keywords": [
    "semiconductor"
  ],
  "maxPatents": 10
}' |
apify call scrapers_lat/singapore-patents-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapers_lat/singapore-patents-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/qaEEHaMe3rAn8RqIi/builds/TIcJ0CLL5AOSB37QS/openapi.json
