# SpringerLink Scraper — Journals, Books & Conference Papers (`trev0n/springerlink-scraper`) Actor

Scrape SpringerLink journals, books and conference papers: abstracts, author keywords, full author lists with affiliations and ORCIDs, open-access status, PDF links and exact citation counts. Includes incremental monitoring that emits only new or updated papers.

- **URL**: https://apify.com/trev0n/springerlink-scraper.md
- **Developed by:** [Paweł](https://apify.com/trev0n) (community)
- **Categories:** Developer tools, Automation, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 publication records

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/platform/actors/running/actors-in-store#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

## 📚 SpringerLink Scraper

🎯 **Turn Springer's 3,500+ journals, books and conference proceedings into a clean, ready-to-analyse dataset — abstracts, keywords, authors, affiliations and citation counts included.**

This scraper collects everything a literature review needs from SpringerLink: titles, DOIs, abstracts, author-supplied keywords, complete author lists with affiliations and ORCIDs, journal and book details, publication dates, open-access status, PDF links and exact citation counts. It works on journal articles, book chapters, conference papers, protocols and reference-work entries — and it gets the abstract and keywords even for paywalled items.

### 🚀 What Does It Do?

This scraper automatically searches SpringerLink and collects **structured, ready-to-use data** on every publication it finds. No manual browsing, no copy-pasting from PDFs — set your filters and hit Start.

💡 **Three ways to tell it what you want:**

1. **🔍 Discovery Mode** — give it keywords (one or many), optionally narrowed by year, content type or open access, and it collects every matching publication
2. **📚 Journal Mode** — point it at a journal and collect everything that journal has published, newest first
3. **🔗 Direct URL Mode** — hand it specific article, chapter, journal or search URLs (or just plain DOIs) and it fills in the full record for each one

⚙️ **And two levels of depth:**

| Mode                       | What you get                                                                                                                                                 | Coverage measured on 200 newly published items | Speed & cost                                                      |
| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------- | ----------------------------------------------------------------- |
| ⚡ **Fast mode** (default) | Titles, authors, journals, dates, DOIs, keywords, topics, exact citation counts, open-access status — plus abstracts wherever an open index already has them | 25% abstracts, 65% keywords, no affiliations   | 200 items in 13 seconds. No browser, no proxy.                    |
| 📖 **Full mode**           | Everything above, plus the abstract straight from Springer, author affiliations, corresponding authors and view counts                                       | 98% abstracts, 99% keywords, 94% affiliations  | 200 items in 90 seconds, about 8× the cost. Still needs no proxy. |

Switch with the **📖 Full mode** toggle. Fast mode is the default because most jobs do not need affiliations — but if you are collecting recent publications and want their abstracts, turn full mode on: it is the difference between a quarter of them and nearly all of them.

Neither mode needs a proxy. Springer does run a protection check on its own pages, and full mode gets through it with a real browser rather than by paying for residential traffic.

### 👥 Who Is This For?

| 🏢 Use Case                                     | 💬 How It Helps                                                                                 |
| ----------------------------------------------- | ----------------------------------------------------------------------------------------------- |
| 🎓 **Researchers & PhD students**               | Build a complete literature review dataset in minutes instead of weeks of manual searching      |
| 📊 **Bibliometrics & research analytics teams** | Track publication volumes, citation growth and topic trends across journals and years           |
| 🏛️ **Universities & research offices**          | Monitor where your faculty publishes and which affiliations appear alongside yours              |
| 💊 **Pharma, biotech & R\&D teams**              | Watch a research area continuously and get alerted the moment relevant work appears             |
| 🤖 **AI & data teams**                          | Feed clean abstracts and keywords into embeddings, RAG pipelines or literature-screening models |
| 📰 **Science publishers & consultants**         | Benchmark competing journals on output, open-access share and citation impact                   |

### ✨ Features

- 📖 **Real abstracts** — full abstract text, not a truncated preview, and in full mode it comes straight from Springer even for paywalled publications; a free Springer Nature API key is the cheap alternative route
- 🏷️ **Author-supplied keywords** — the keywords the authors actually chose, kept separate from Springer's broad subject categories
- 👥 **Complete author data** — every author with ORCID identifiers, and in full mode their affiliations and which of them is the corresponding author
- 📈 **Exact citation counts** — precise numbers, not the rounded "19k" shown on the page
- 🔓 **Open-access detection** — know exactly which publications are freely readable and under which licence
- 📄 **All content types** — journal articles, book chapters, conference papers, protocols and reference-work entries
- 🎛️ **Smart Filters** — keywords, journal or ISSN, year range, content type, open access only, minimum citations, must-contain and must-not-contain words
- 🔄 **Incremental Monitoring** — on scheduled runs, only new and changed publications are returned, cutting the cost of a daily literature alert by 80–95%
- 🔔 **Instant Alerts** — new publications can be pushed straight to Slack, Telegram, Discord or your own webhook
- 🧹 **Deduplication** — every publication appears once, no matter how many searches found it
- ⚡ **Fast & Scalable** — thousands of publications per run, with no cap on how many a search can return
- 📤 **Export Anywhere** — download results as JSON, CSV, Excel, or push to Google Sheets, Zapier, Make, or your CRM

### 🎛️ Filters & Options

| Option                         | What It Does                                                                                            |
| ------------------------------ | ------------------------------------------------------------------------------------------------------- |
| 🔍 **Search query**            | One or more search phrases, run together in a single job                                                |
| 📚 **Journals**                | Restrict the run to specific journals, by SpringerLink journal id or ISSN                               |
| 📄 **Content type**            | Keep only journal articles, book chapters, conference papers, books, protocols or reference entries     |
| 📅 **Published from / to**     | Limit results to a year range                                                                           |
| 🕒 **Published within**        | Keep only the last 3, 6, 12 or 24 months, counted from the day the run starts                           |
| ↕️ **Sort by**                 | Relevance, newest first, or oldest first                                                                |
| 🔓 **Open access only**        | Keep only freely readable publications                                                                  |
| 📈 **Minimum citations**       | Drop publications below a citation threshold                                                            |
| ✅ **Must contain**            | Keep a publication only if these words appear in its title, abstract or keywords                        |
| 🚫 **Must not contain**        | Drop publications containing these words                                                                |
| 📖 **Full mode**               | Read Springer's own pages for abstracts, author keywords, affiliations and view counts (off by default) |
| 🔑 **Springer Nature API key** | Free key that fills in abstracts as data instead of page reads                                          |
| ✂️ **Abstract max length**     | Trim long abstracts to a fixed size                                                                     |
| 📎 **Include reference lists** | Add every work a publication cites                                                                      |
| 📊 **Exact citation counts**   | Add precise citation and reference counts                                                               |
| 🔄 **Incremental monitoring**  | Return only what changed since the previous run                                                         |
| 🔢 **Max Results**             | Control how many publications to extract per run                                                        |
| 🔗 **Direct URLs**             | Optionally provide specific URLs or DOIs to scrape                                                      |

💡 **Pasting a search URL?** Build the search on the SpringerLink website exactly as you want it — date window, disciplines, advanced-search options, sort order — and paste the finished address into **🔗 Direct URLs**. Every filter it carries is kept, on the first page and on every page after it, and the address actually requested is printed in the run log so you can check it at a glance.

### 📦 What You Get (Output Fields)

Every publication includes:

#### Publication

| Field       | Example                                                        |
| ----------- | -------------------------------------------------------------- |
| doi         | `10.1007/s10994-025-06923-w`                                   |
| title       | `Cluster-based multidimensional scaling for large datasets`    |
| url         | `https://link.springer.com/article/10.1007/s10994-025-06923-w` |
| contentType | `article`                                                      |
| articleType | `OriginalPaper`                                                |
| language    | `en`                                                           |
| publisher   | `Springer US`                                                  |
| source      | `springer`                                                     |

#### Journal & Book Details

| Field           | Example                      |
| --------------- | ---------------------------- |
| journalName     | `Machine Learning`           |
| journalAbbrev   | `Mach Learn`                 |
| issn            | `["1573-0565", "0885-6125"]` |
| isbn            | `[]`                         |
| volume          | `114`                        |
| issue           | `12`                         |
| pages           | `289`                        |
| articleNumber   | `289`                        |
| conferenceTitle | `null`                       |

#### Dates

| Field         | Example      |
| ------------- | ------------ |
| publishedDate | `2025-11-25` |
| onlineDate    | `2025-11-25` |
| issueDate     | `2025-12-01` |
| year          | `2025`       |

#### Content

| Field          | Example                                                                     |
| -------------- | --------------------------------------------------------------------------- |
| abstract       | `Multidimensional scaling is a popular dimensionality reduction technique…` |
| abstractLength | `1114`                                                                      |
| keywords       | `["Multidimensional scaling", "Dimensionality reduction", "Clustering"]`    |
| subjects       | `["Machine Learning", "Artificial Intelligence"]`                           |

#### Authors

| Field                | Example                                                                                                                                                                                                                            |
| -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| authors              | `[{"name": "Joonas Hämäläinen", "affiliation": "Faculty of Information Technology, University of Jyvaskyla, Jyvaskyla, Finland", "orcid": "0000-0002-8466-9232", "email": "joonas.k.hamalainen@jyu.fi", "isCorresponding": true}]` |
| authorCount          | `3`                                                                                                                                                                                                                                |
| correspondingAuthors | `["Joonas Hämäläinen"]`                                                                                                                                                                                                            |

#### Access & Impact

| Field          | Example                                                                |
| -------------- | ---------------------------------------------------------------------- |
| isOpenAccess   | `true`                                                                 |
| license        | `http://creativecommons.org/licenses/by/4.0/`                          |
| copyright      | `2025 The Author(s)`                                                   |
| pdfUrl         | `https://link.springer.com/content/pdf/10.1007/s10994-025-06923-w.pdf` |
| citationCount  | `7`                                                                    |
| citationSource | `crossref`                                                             |
| referenceCount | `118`                                                                  |
| accessesCount  | `2811`                                                                 |
| altmetricScore | `1`                                                                    |

#### Monitoring (incremental runs only)

| Field       | Example                                    |
| ----------- | ------------------------------------------ |
| changeType  | `NEW`                                      |
| firstSeenAt | `2026-07-20T06:00:00.000Z`                 |
| lastSeenAt  | `2026-07-28T06:00:00.000Z`                 |
| contentHash | `9f2c1ab84e0d5b7c3f6a10e8d4b2c9f7a1e5d3b8` |

### 📊 Example Output

```json
{
    "doi": "10.1007/s10994-025-06923-w",
    "title": "Cluster-based multidimensional scaling for large datasets",
    "url": "https://link.springer.com/article/10.1007/s10994-025-06923-w",
    "source": "springer",
    "discoverySource": "crossref",
    "contentType": "article",
    "articleType": "OriginalPaper",
    "journalName": "Machine Learning",
    "journalAbbrev": "Mach Learn",
    "issn": ["1573-0565", "0885-6125"],
    "isbn": [],
    "volume": "114",
    "issue": "12",
    "pages": "289",
    "articleNumber": "289",
    "publishedDate": "2025-11-25",
    "onlineDate": "2025-11-25",
    "issueDate": "2025-12-01",
    "year": 2025,
    "authors": [
        {
            "name": "Joonas Hämäläinen",
            "affiliation": "Faculty of Information Technology, University of Jyvaskyla, Jyvaskyla, Finland",
            "affiliations": ["Faculty of Information Technology, University of Jyvaskyla, Jyvaskyla, Finland"],
            "orcid": "0000-0002-8466-9232",
            "email": "joonas.k.hamalainen@jyu.fi",
            "isCorresponding": true
        },
        {
            "name": "Tommi Kärkkäinen",
            "affiliation": "Faculty of Information Technology, University of Jyvaskyla, Jyvaskyla, Finland",
            "affiliations": ["Faculty of Information Technology, University of Jyvaskyla, Jyvaskyla, Finland"],
            "orcid": null,
            "email": null,
            "isCorresponding": false
        }
    ],
    "authorCount": 2,
    "correspondingAuthors": ["Joonas Hämäläinen"],
    "abstract": "Multidimensional scaling is a popular dimensionality reduction technique that embeds high-dimensional data into a low-dimensional space while preserving pairwise distances as faithfully as possible…",
    "abstractLength": 1114,
    "keywords": ["Multidimensional scaling", "Dimensionality reduction", "Clustering", "Big data"],
    "subjects": ["Machine Learning", "Artificial Intelligence", "Simulation and Modeling"],
    "language": "en",
    "isOpenAccess": true,
    "license": "http://creativecommons.org/licenses/by/4.0/",
    "copyright": "2025 The Author(s)",
    "pdfUrl": "https://link.springer.com/content/pdf/10.1007/s10994-025-06923-w.pdf",
    "citationCount": 7,
    "citationSource": "crossref",
    "referenceCount": 118,
    "references": [],
    "accessesCount": 2811,
    "altmetricScore": 1,
    "conferenceTitle": null,
    "detailFetched": true,
    "contentHash": "9f2c1ab84e0d5b7c3f6a10e8d4b2c9f7a1e5d3b8",
    "scrapedAt": "2026-07-28T10:48:41.398Z"
}
```

### 📋 Dataset Views

The Apify Console gives you **five ready-made table views** to quickly browse your results:

| View                          | What It Shows                                                                        |
| ----------------------------- | ------------------------------------------------------------------------------------ |
| 📊 **Overview**               | Title, journal, publication date, author count, citations, open access, DOI and link |
| 📖 **Abstracts & keywords**   | Title, abstract, keywords and subject areas — the reading list view                  |
| 👥 **Authors & affiliations** | Every author with affiliation and ORCID, plus who the corresponding author is        |
| 🔄 **Monitoring changes**     | What is new, updated or gone since the previous run                                  |
| 📋 **Full Details**           | Every single field — the complete dataset                                            |

### ❓ FAQ

**🤔 Do I get abstracts for paywalled publications?**
Yes, in full mode. Springer shows the abstract, keywords and author details openly even when the full text sits behind a paywall, so those fields come through for gated items too. Only the full text and PDF content stay inaccessible — this scraper never touches them.

**🤔 Which mode do I need?**
Start with the default fast mode: it is quick, cheap and gives you the complete bibliographic record with keywords and citation counts. Switch on full mode when you specifically need abstracts for very recent papers, author affiliations, corresponding authors or view counts — those live only on Springer's own pages. If you want the abstracts but not the affiliations, there is a middle option: paste a free Springer Nature API key and abstracts arrive as data instead of page reads.

**🤔 Is there a limit on how many results a search can return?**
No. The website's own search stops at 1,000 results per query, but this scraper uses an unlimited index by default, so a search with 50,000 matches will hand you all 50,000.

**🤔 How is this different from a free DOI lookup?**
Free bibliographic sources give you titles, authors and dates, and they lag badly on anything published in the last few months. This scraper adds the keywords, topics, exact citation counts and open-access status in fast mode, and in full mode the abstract, author affiliations, corresponding author and view counts that no free lookup carries.

**🤔 Can I watch a research area continuously?**
Yes — turn on incremental monitoring and schedule the run. Every later run returns only publications that are new or have changed, and can push them to Slack, Telegram, Discord or your webhook.

**🤔 Can I export the data?**
Yes — JSON, CSV, Excel, XML, HTML, RSS. You can also push data directly to Google Sheets, Zapier, Make, or any webhook/API endpoint.

**🤔 How often should I run this?**
For fresh data, run daily or weekly. You can schedule automatic runs on Apify with just a few clicks.

**🤔 Does it work with proxies?**
It works without one. Neither mode needs a proxy: the metadata channels are never blocked, and full mode gets through Springer's protection check with a real browser rather than by buying residential traffic — measured at about one second to clear, with no refusals across several hundred publication pages. A proxy can still be configured, and if you do, it is held back and used only when a page is genuinely refused, so you are never billed for residential traffic speculatively. Springer's check is address-scoped, so switching to Residential is the right move if a run ever does report refused pages.

**🤔 Can I get abstracts without opening Springer's pages?**
Yes, with a free Springer Nature API key (dev.springernature.com — sign up, create an application, copy the key). Paste it into **🔑 Springer Nature API key** and abstracts come back as JSON. The free tier is 500 requests a day and this scraper batches 25 publications per request, so one key covers roughly 12,500 abstracts a day. Affiliations, corresponding authors and view counts are not in that API — they exist only on the publication page, so they still need full mode.

### 🛠️ Need Custom Filters or Features?

**I'm happy to customize this scraper for your specific needs!** 🤝

Whether you need:

- 🎯 Additional filters (specific journal collections, author or institution watchlists, funder or grant references, language, subject taxonomies)
- 📊 Extra data fields or custom output formats
- 🔄 Integration with your CRM, reference manager, Google Sheets, or database
- ⏰ Scheduled scraping with automatic deduplication
- 🌐 Scraping from other academic publisher platforms alongside SpringerLink — the output schema is shared across my publisher scrapers, so datasets from several publishers merge cleanly

👉 **Don't hesitate to reach out via private message** — I respond quickly and I'm always open to building exactly what you need. No request is too small or too specific!

### ⚖️ Legal & Ethical Use

This scraper collects **only publicly available information** from SpringerLink. It does not access private data, bypass authentication, or download paywalled full-text content. Please use the data responsibly and in compliance with applicable laws and platform terms of service.

# Actor input Schema

## `searchQuery` (type: `array`):

What to search for. Add several queries to run them in one go (e.g. "machine learning", "battery recycling"). Leave empty if you use journals or direct URLs instead.

## `journalIds` (type: `array`):

Restrict the run to specific journals. Accepts a SpringerLink journal id (the number in link.springer.com/journal/10994) or an ISSN (e.g. 1573-0565). With no search query this collects everything the journal published, newest first.

## `issn` (type: `string`):

A single journal ISSN to scope the search to. Same effect as adding it to Journals.

## `contentType` (type: `string`):

Limit results to one kind of publication. Springer files conference papers as book chapters, so they arrive together; full mode then labels the ones it can confirm as conference papers.

## `yearFrom` (type: `integer`):

Only include publications from this year onwards.

## `yearTo` (type: `integer`):

Only include publications up to and including this year.

## `publishedWithin` (type: `string`):

Keep only recently published work, counted back from today. Ignored when a year range above is set.

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

Result order.

## `openAccessOnly` (type: `boolean`):

Keep only freely readable publications.

## `minCitations` (type: `integer`):

Drop publications cited fewer times than this. Needs citation counts enabled (they are by default).

## `includeKeywords` (type: `array`):

Keep a publication only if its title, abstract or keywords contain at least one of these words.

## `excludeKeywords` (type: `array`):

Drop publications whose title, abstract or keywords contain any of these words.

## `startUrls` (type: `array`):

Scrape specific SpringerLink URLs — article pages, chapter pages, journal pages or search result pages.

## `dois` (type: `array`):

Scrape publications by DOI (e.g. 10.1007/s10994-025-06923-w). The right page is found automatically, whether it is an article, a chapter or a protocol.

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

Stop after this many publications. Set 0 for no limit.

## `maxPages` (type: `integer`):

Stop each search after this many result pages. 0 means no page limit.

## `detailConcurrency` (type: `integer`):

Full mode only: how many publication pages to read in parallel from the one warm browser session. Measured on 200 pages, 4 and 8 finish within about 10% of each other and neither tripped Springer's protection check, so 4 is the default for its slightly lower retry rate. Going much higher risks a burst being refused, which costs more than it saves.

## `fetchArticlePages` (type: `boolean`):

Additionally open each publication's page on SpringerLink for everything no open index carries: the abstract of anything published too recently to have been indexed, author affiliations, corresponding-author e-mails, the publisher's own keyword list and the view/Altmetric counters. Measured on 200 brand-new publications: abstracts went from 25% to 98%, keywords from 65% to 99%, affiliations from none to 94%. Springer runs a protection check on page reads, so this drives a real browser — give the run 2048 MB. It needs no proxy, and costs about 8× the default mode per publication (200 items in 90 seconds against 13), which is why it is off by default.

## `abstractMaxLength` (type: `integer`):

Trim abstracts to this many characters. 0 keeps them in full.

## `includeReferences` (type: `boolean`):

Add the full list of works each article cites. Makes records much bigger.

## `includeCitationCounts` (type: `boolean`):

Add exact citation counts and reference counts. Recommended — the counts shown on the page itself are rounded ("19k").

## `includeOpenAlexData` (type: `boolean`):

Adds keywords, topics, open-access status and a fallback abstract from an open scholarly index. On by default: it needs no proxy, is never blocked, and covers the great majority of recent publications.

## `includeSpringerAbstracts` (type: `boolean`):

Fetches a ~2 KB citation record for every publication that still has no abstract — no browser and no 300 KB page. Off by default because it does not work from Apify: measured, Springer's citation service answered its JavaScript protection check to every attempt — plain requests, the Apify residential proxy, sticky sequential sessions, cookies borrowed from a browser that had already cleared link.springer.com, and even a real browser pointed straight at it. Turn it on only if you supply proxy URLs for a network Springer trusts, such as a university connection. For a supported cheap abstract channel use the Springer Nature API key below instead.

## `springerApiKey` (type: `string`):

Paste a free Springer Nature API key to fill in abstracts straight from Springer's official API instead of opening publication pages. Get one in a minute at dev.springernature.com: sign up, create an application, copy the key. The free tier allows 500 requests a day and this actor batches 25 publications per request, so one key covers about 12,500 abstracts a day. Use this when you want abstracts cheaply but do not need author affiliations or view counts — those exist only on the publication page, so they still need full mode.

## `discoveryChannel` (type: `string`):

How keyword searches are answered. Automatic is unlimited and recommended. "SpringerLink search" mirrors the website's own ranking but is capped at 1,000 results per query and can be rate-limited.

## `warmupTimeoutSecs` (type: `integer`):

Full mode only. How long to give the browser to get through Springer's protection check before trying a different address. Raise this on slow networks.

## `browserChannel` (type: `string`):

Full mode only. Which browser to drive. Google Chrome is the only one that reliably gets through the protection check.

## `crossrefMailto` (type: `string`):

Optional. A contact address sent with metadata requests to get the faster service tier.

## `compact` (type: `boolean`):

Emit only the essential fields (title, authors, abstract, keywords, citations, link).

## `excludeEmptyFields` (type: `boolean`):

Leave empty fields out of the records entirely.

## `incrementalMode` (type: `boolean`):

Across scheduled runs, emit only publications that are new or changed since last time. Cuts the cost of daily literature alerts by 80–95%.

## `stateKey` (type: `string`):

Name for this monitoring baseline. Leave empty to derive one from your search settings. Use different keys for different watch lists.

## `emitUnchanged` (type: `boolean`):

Also emit publications that haven't changed since the previous run.

## `emitExpired` (type: `boolean`):

Also emit publications that were in the previous run but are no longer found.

## `webhookUrl` (type: `string`):

POST the run results to this URL when monitoring finds something.

## `telegramBotToken` (type: `string`):

Send new publications to a Telegram chat.

## `telegramChatId` (type: `string`):

Chat that receives the Telegram messages.

## `discordWebhookUrl` (type: `string`):

Send new publications to a Discord channel.

## `slackWebhookUrl` (type: `string`):

Send new publications to a Slack channel.

## `notifyOnlyChanges` (type: `boolean`):

Stay silent when a monitoring run finds nothing new.

## `notificationLimit` (type: `integer`):

How many publications to list in a notification message.

## `includeRunSummary` (type: `boolean`):

Add the run statistics to webhook payloads.

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

Proxy settings. None is the default because no mode needs one: the metadata channels are never blocked, and in full mode the real browser clears Springer's protection check straight from Apify's network — measured in about a second, with zero refusals across several hundred publication pages. If you do configure a proxy it is kept in reserve and only used once a page is actually refused, so you never pay for residential traffic speculatively. Residential is worth setting if a run reports refused pages, since the check is address-scoped.

## `debug` (type: `boolean`):

Log the status, title and first characters of any page that could not be read. Useful when a run returns fewer results than expected.

## Actor input object example

```json
{
  "searchQuery": [
    "machine learning"
  ],
  "contentType": "any",
  "publishedWithin": "any",
  "sortBy": "relevance",
  "openAccessOnly": false,
  "minCitations": 0,
  "maxResults": 100,
  "maxPages": 0,
  "detailConcurrency": 4,
  "fetchArticlePages": false,
  "abstractMaxLength": 0,
  "includeReferences": false,
  "includeCitationCounts": true,
  "includeOpenAlexData": true,
  "includeSpringerAbstracts": false,
  "discoveryChannel": "auto",
  "warmupTimeoutSecs": 240,
  "browserChannel": "chrome",
  "compact": false,
  "excludeEmptyFields": false,
  "incrementalMode": false,
  "emitUnchanged": false,
  "emitExpired": false,
  "notifyOnlyChanges": true,
  "notificationLimit": 10,
  "includeRunSummary": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  },
  "debug": false
}
```

# Actor output Schema

## `overview` (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 = {
    "searchQuery": [
        "machine learning"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("trev0n/springerlink-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 = { "searchQuery": ["machine learning"] }

# Run the Actor and wait for it to finish
run = client.actor("trev0n/springerlink-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "searchQuery": [
    "machine learning"
  ]
}' |
apify call trev0n/springerlink-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=trev0n/springerlink-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/ZjxeU6A6hFIj1wEky/builds/oG2Ef5c3AfCWtfVMR/openapi.json
