# RISS Scraper: 학술연구정보서비스 Theses & University Leaderboard (`getascraper/riss-scraper`) Actor

Search RISS, Korea's national thesis and academic-paper platform, and get a University Research Output Leaderboard ranking which universities lead a topic, plus title, author, university, year, degree type, Korean/English abstracts, and a monitor mode. No login needed.

- **URL**: https://apify.com/getascraper/riss-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** Automation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.63 / 1,000 records

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?

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

## RISS Scraper: 학술연구정보서비스 Theses & Papers

<table width="100%">
<tr>
<td style="padding:24px 28px;background:#EAF1FB;border:1px solid #C7D9F0;border-top:4px solid #1B4F91;border-radius:12px">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">See which Korean universities lead any research field</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Search RISS, Korea's national thesis and academic-paper database, and get a ranked leaderboard of the institutions actually publishing on your topic, alongside the full record for every paper and thesis. No other Apify actor covers RISS at all.</span>
</td>
</tr>
</table>

<table width="100%">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #C7D9F0;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#1B4F91">🏆 University leaderboard</span><br>
<span style="font-size:12px;color:#57534E">See who leads your topic, ranked by real output volume, instantly.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #C7D9F0;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#1B4F91">📄 Bilingual full records</span><br>
<span style="font-size:12px;color:#57534E">Korean and English abstracts, author, university, and degree type included.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #C7D9F0;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#1B4F91">🔁 Monitor mode</span><br>
<span style="font-size:12px;color:#57534E">Get only the newly-indexed theses and papers on a saved search.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #C7D9F0;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#1B4F91">🔓 No login needed</span><br>
<span style="font-size:12px;color:#57534E">Public academic metadata, zero account or API key required.</span>
</td>
</tr>
</table>

Point this actor at RISS (학술연구정보서비스, riss.kr), the KERIS-run database that indexes over 68,000 Korean domestic journal articles, theses, and overseas journal articles on a single topic search. It returns structured records plus a University Research Output Leaderboard computed automatically from the same results, at no extra cost.

### 🔍 What does this actor do?

RISS is Korea's national academic search platform, the closest thing Korea has to a combined Google Scholar and national thesis repository. Searching it by hand means paging through category tabs one at a time and manually tallying which institutions show up most. This actor does that work for you.

Search by keyword across domestic journal articles, theses and dissertations, and overseas journal articles. Every result comes back with title, author, university or publisher, year, degree type, and both the Korean and English (or multilingual) abstract when RISS provides one, plus a reference count and similar-researcher count where available.

The University Research Output Leaderboard is the real reason to run this actor: a second, ready-made dataset view that ranks universities by how much they've published on your exact search topic, broken down by domestic journal, thesis, and overseas journal output. It costs nothing extra since it's built from the same rows already in your results. Turn on Monitor Mode to get a running feed of newly-indexed research on a saved topic, instead of re-reading the same results every time.

### 💡 Who uses this?

- **I run market research on Korean R\&D activity.** I need to know which institutions actually lead a technology area, like semiconductor packaging or battery chemistry, not just a pile of papers I'd have to sort through myself.
- **I build academic search or citation-analytics tools.** I need structured Korean academic metadata, with real bilingual abstracts, without hand-parsing RISS's own site or paying for a data broker.
- **I'm a researcher or graduate student doing a literature review.** I want a structured, exportable list of theses and papers on my topic, not a slow afternoon paging through RISS one result at a time.

### 🚀 How to use

<table width="100%">
<tr>
<td style="padding:16px 14px;width:33%;background:#EAF1FB;border:1px solid #C7D9F0;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#1B4F91;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Enter your topic</span><br>
<span style="font-size:12px;color:#57534E">Type a search term, in Korean or English, and pick how many results you want.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#EAF1FB;border:1px solid #C7D9F0;border-left:none;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#1B4F91;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">The actor searches RISS</span><br>
<span style="font-size:12px;color:#57534E">It checks domestic journals, theses, and overseas journals, and fetches full details for each result.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#EAF1FB;border:1px solid #C7D9F0;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#1B4F91;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Get your results and leaderboard</span><br>
<span style="font-size:12px;color:#57534E">Download the full records, plus the University Leaderboard ranking who's active in the field.</span>
</td>
</tr>
</table>

### 📥 Input

| Field | Type | Required | Description |
|---|---|---|---|
| `query` | string | Yes | The term to search for on RISS, in Korean or English. |
| `resultTypes` | array of enum | No | Restrict the search to one or more of RISS's three categories: domestic journal articles, theses, overseas journal articles. Leave empty to search all three. |
| `maxResults` | integer | No | Maximum results to return, split evenly across the selected categories. Default: 15, kept low so a default run finishes within minutes. |
| `dateFrom` | integer | No | Only include results published in or after this year, e.g. `2020`. |
| `dateTo` | integer | No | Only include results published in or before this year, e.g. `2025`. |
| `onlyNewOrChanged` | boolean | No | Monitor mode. When on, re-running the same search with the same State Name reports only results not seen in a previous run. |
| `stateName` | string | No | Label for this search's saved monitor history, so different saved searches don't overwrite each other. |
| `resetState` | boolean | No | Clears this search's saved monitor history before the run starts. |
| `proxyConfiguration` | proxy | No | Keep the datacenter default; it reaches RISS without issue and costs far less than residential. |

### 📊 Data table

| Field | Type | Description |
|---|---|---|
| `controlNo` | string | RISS's own stable identifier for this result. |
| `title` | string | Title of the paper or thesis. |
| `author` | string | absent | Author name, when published. |
| `university` | string | absent | Degree-granting university (theses) or publishing institution (journal articles). Powers the University Leaderboard. |
| `year` | integer | absent | Publication year. |
| `degreeType` | string | absent | Degree type, theses only, for example 박사 (PhD) or 석사 (Master's). |
| `resultType` | string | Which RISS category this result came from: `domesticJournal`, `thesis`, or `overseasJournal`. |
| `abstractKo` | string | absent | Korean-language abstract, when RISS provides one. |
| `abstractEn` | string | absent | English or multilingual abstract, when RISS provides one. Overseas journal articles typically don't carry either abstract. |
| `referenceCount` | integer | absent | Number of references listed, when RISS publishes a reference list for this result. |
| `similarResearchersCount` | integer | absent | Count of similar researchers RISS itself surfaces for this result, when available. |
| `sourceUrl` | string | Direct link to the result's RISS detail page. |

You can download the dataset in JSON, HTML, CSV, or Excel from the Output tab of any run. The 🏆 University Leaderboard and 📊 Category Breakdown are available from the same run's Key-Value Store tab (as `LEADERBOARD` and `BREAKDOWN` records), computed from the same results at no extra charge.

### 📤 Sample output

```json
{
    "controlNo": "9b2931e7dd2188b4b36097776a77e665",
    "title": "생성 인공지능에 대한 예술 전공생의 인식 조사",
    "author": "이재박",
    "university": "중앙대학교 인공지능인문학연구소",
    "year": 2024,
    "resultType": "domesticJournal",
    "abstractKo": "본 연구는 예술 전공생들을 대상으로 인공지능 창작 기술에 대한 관심정도...",
    "abstractEn": "This study analyzes art majors' perceptions, utilization, satisfaction...",
    "similarResearchersCount": 20,
    "sourceUrl": "https://www.riss.kr/search/detail/DetailView.do?p_mat_type=1a0202e37d52c72d&control_no=9b2931e7dd2188b4b36097776a77e665"
}
```

### 💰 Pricing

Pricing is pay per result. You are charged only for records successfully written to your dataset, and the University Leaderboard and Category Breakdown views never cost extra since they're built from the same records. Empty runs cost nothing. There are no monthly subscriptions or minimum commitments.

Free plan runs are limited in items per run, runs per day, and a short wait between runs. These limits do not apply to paid plans.

### ⭐ Enjoying RISS Scraper?

<table width="100%" style="display:table;width:100%">
<tr>
<td style="padding:20px 24px 14px;background:#EAF1FB;border:1px solid #C7D9F0;border-left:5px solid #1B4F91;border-radius:10px 10px 0 0">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">One run just told you who leads this research field, not just who published a paper about it.</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other researchers and analysts find this actor. Your feedback also tells us what to build next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#1B4F91;border:1px solid #C7D9F0;border-top:none;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/getascraper/riss-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### ✨ Tips

- **Start with the leaderboard, not the raw list.** Open the run's Key-Value Store tab and check the 🏆 University Leaderboard record first to see who's active in a field before reading individual records.
- **Narrow by category when you only need one type.** Set `resultTypes` to just `thesis`, for example, when you specifically want graduate research rather than published journal articles.
- **Bound your years.** Use `dateFrom`/`dateTo` to focus the leaderboard on recent activity, for example the last five years, rather than a topic's entire publication history.
- **Track a field over time.** Turn on `onlyNewOrChanged` with a `stateName` and schedule the run. Each run after the first reports only newly-indexed research.
- **Run separate watchlists.** Use a different `stateName` for each distinct topic you want tracked independently.

### ❓ FAQ

##### 리스 검색 (RISS search) - can I search RISS through an API?

RISS itself has no public search API. This actor reads RISS's own public, unauthenticated search and detail pages and returns the results as structured data, the same pages any visitor can browse without logging in.

##### What is the University Research Output Leaderboard?

It's a second dataset view, included in every run, that groups your results by university and ranks them by total output plus category mix (domestic journal, thesis, overseas journal). It's computed from the same records already fetched for your main results, so it never costs extra.

##### Does this actor download the full text of papers?

No. RISS's own full-text download (원문보기) is login and points-walled on RISS itself. This actor returns bibliographic metadata (title, author, university, abstracts, reference count), never full text, and never attempts to bypass that wall.

##### Does every result have both a Korean and English abstract?

Not always. RISS provides both for most domestic journal articles and theses, when the author submitted one. Overseas journal article records typically carry only bibliographic details with no abstract at all, since RISS indexes those as citation entries rather than full records.

##### Is scraping RISS legal?

This actor reads publicly available search and detail pages, the same pages any visitor can view without logging in. You are responsible for complying with RISS's terms of service and applicable laws. For questions or custom fields, contact the author at <devanshtiwari365@gmail.com>.

### 🔗 Other actors

- [CNKI Scraper: 中国知网 Citations, Rankings & Academic Search](https://apify.com/getascraper/cnki-scraper) ↗ - the same structured-academic-search approach for China's national academic database, with citation counts and journal-prestige tiers.
- [J-STAGE Scraper: 学術論文・引用検索 Research Leaderboard](https://apify.com/getascraper/jstage-scraper) ↗ - an Author and Journal Leaderboard for Japan's national academic journal platform.
- [Google Maps Posts Scraper: Track Posts & Rank Local Competitors](https://apify.com/getascraper/google-maps-business-posts-scraper) ↗ - the same ranked-leaderboard approach applied to local business posting activity.
- [GoCollect Scraper: CGC/CBCS/PSA/BGS Census, Sold Prices & More](https://apify.com/getascraper/gocollect-scraper) ↗ - population census and price data aggregated the same way, for graded collectibles instead of academic output.

# Changelog

This Actor's version history is a separate document: https://apify.com/getascraper/riss-scraper/changelog.md

# Actor input Schema

## `query` (type: `string`):

The term to search for on RISS (학술연구정보서비스), Korea's national thesis and academic-paper platform. Matched against RISS's own integrated search across domestic journal articles, theses/dissertations, and overseas journal articles.

## `resultTypes` (type: `array`):

Restrict the search to one or more of RISS's own three result categories. Leave empty to search all three (confirmed live: an empty selection searches everything, not zero results). No existing Apify Actor covers this niche at all, so there is no competitor field gap to close here, just RISS's own bare category counts that this Actor turns into a filterable, structured search.

## `dateFrom` (type: `integer`):

Only include results published in or after this year, e.g. 2020. This is a whole publication year, not a calendar date: RISS's own year filter is a list of per-year checkboxes rather than a from/to date-range parameter, so this Actor fetches results normally and then filters them locally by the year already parsed from each result row, at no extra request cost. Leave blank for no lower bound.

## `dateTo` (type: `integer`):

Only include results published in or before this year, e.g. 2025. Same whole-year, locally-applied filter as Publication Year From above, since RISS itself does not expose a from/to year-range parameter. Leave blank for no upper bound.

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

Maximum number of theses/papers to return, split evenly across the selected Result Categories (e.g. 15 results across all 3 categories fetches about 5 of each). Kept in a 10-25 band so the default run completes well within Apify's 5-minute default-run budget, given RISS's own disclosed 10-second crawl delay and this Actor's per-item detail-page fetch for abstracts.

## `proxyConfiguration` (type: `object`):

RISS's search and detail pages showed no active anti-bot enforcement during testing (no WAF, no CAPTCHA - only the disclosed 10-second crawl delay, which this Actor already respects), so the default Apify datacenter proxy is sufficient. Residential is not required.

## `onlyNewOrChanged` (type: `boolean`):

When enabled, re-running this same search (with the same State Name) reports only results not seen in a previous run, instead of the full result set every time. Each result is identified by RISS's own control\_no value, confirmed live to stay stable across repeated fetches of the same search, so this stays accurate on a recurring schedule rather than reporting the same theses as "new" every run.

## `stateName` (type: `string`):

Identifies this search's persisted monitor state, so you can run several different saved searches without them overwriting each other's history. Only relevant when Only New Theses/Papers is enabled.

## `resetState` (type: `boolean`):

Clears the persisted monitor history for this State Name before this run starts, so the next results are treated as a fresh baseline instead of being diffed against a previous run.

## Actor input object example

```json
{
  "query": "인공지능",
  "resultTypes": [],
  "maxResults": 15,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "onlyNewOrChanged": false,
  "stateName": "default",
  "resetState": false
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `leaderboard` (type: `string`):

No description

## `breakdown` (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 = {
    "query": "인공지능",
    "resultTypes": [],
    "maxResults": 15,
    "proxyConfiguration": {
        "useApifyProxy": true
    },
    "onlyNewOrChanged": false,
    "stateName": "default",
    "resetState": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/riss-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 = {
    "query": "인공지능",
    "resultTypes": [],
    "maxResults": 15,
    "proxyConfiguration": { "useApifyProxy": True },
    "onlyNewOrChanged": False,
    "stateName": "default",
    "resetState": False,
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/riss-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 '{
  "query": "인공지능",
  "resultTypes": [],
  "maxResults": 15,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "onlyNewOrChanged": false,
  "stateName": "default",
  "resetState": false
}' |
apify call getascraper/riss-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/riss-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/n5IH1nFfmMQ1yXKN7/builds/YaHINeJds774ZppLV/openapi.json
