# Citadel Securities Scraper (`axlymxp/citadel-securities-scraper`) Actor

Extract Citadel Securities content as structured JSON — News & Insights articles (full text), open jobs with locations, leadership profiles and career perspectives. Keyword search + direct-URL modes. Built for market research, LLM datasets and talent intelligence. Pay only for results.

- **URL**: https://apify.com/axlymxp/citadel-securities-scraper.md
- **Developed by:** [axly](https://apify.com/axlymxp) (community)
- **Categories:** News, Business, Jobs
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 dataset items

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?

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

## Citadel Securities Scraper

Turn [Citadel Securities](https://www.citadelsecurities.com)' website into clean,
structured JSON. Extract **News & Insights** articles with their **full body
text**, **open jobs** with structured locations, **leadership** profiles, and
**career perspectives** — plus a **keyword search** mode and a **direct-URL** mode
— ready for analysis, dashboards, CRMs, or LLM pipelines.

There is no official Citadel Securities API and no other Citadel scraper on the
Store. This actor handles the site's Cloudflare protection for you and returns
normalized rows with a single, consistent schema.

### Who it's for

- **Financial researchers & competitive intelligence** — collect Citadel's
  market-structure commentary and thought leadership as full-text JSON for
  analysis, monitoring, or newsletters.
- **AI / LLM teams** — build clean, full-body article datasets for retrieval,
  fine-tuning, or summarization.
- **Recruiters & talent intelligence** — track Citadel's quant, engineering, and
  trading roles (title, employment type, locations) and how hiring changes over
  time.
- **Analysts & journalists** — pull the leadership roster and career-perspective
  stories on demand.

### What you get (output fields)

Every row shares one schema; fields not relevant to a given item are `null`.

| Field | Type | Description |
| ----- | ---- | ----------- |
| `data_type` | string | `news`, `career` (job), `leadership`, `page`, `career_perspective`, or `search` |
| `url` | string | Canonical content URL |
| `title` | string | Article/job title (person name for leadership) |
| `description` | string | Short summary / meta description |
| `body` | string | **Full article body text** (news / career perspectives) |
| `date_published` / `date_modified` | string | ISO-8601 datetimes (news) |
| `category` / `section` | string | Article category / section |
| `authors` | array | Author names |
| `word_count` | integer | Article length |
| `image` | string | Lead image URL |
| `date_posted` | string | Job posting date |
| `employment_type` | string | e.g. internship, full-time (jobs) |
| `hiring_organization` | string | Hiring org (jobs) |
| `locations` | array | Structured job locations: `street, city, region, postal_code, country` |
| `job_benefits` / `direct_apply` | string / boolean | Job posting extras |
| `name` / `job_title` / `organization` | string | Leadership profile fields |
| `kind` / `search_category` | string | Search-result labels |
| `language` | string | `en` / `ja-jp` / `zh-hans` |
| `lastmod` | string | Sitemap last-modified date |
| `scraped_at` | string | ISO-8601 scrape timestamp |

### High-value use cases

- **Thought-leadership monitoring** — schedule a daily incremental run
  (`dataType=news`, `since=<last run>`) and pipe new articles to Slack, a
  newsletter, or a research database.
- **LLM knowledge base** — one-shot `dataType=news` with a high `maxItems` to
  ingest the full News & Insights archive with clean body text.
- **Hiring intelligence** — run `dataType=jobs` on a schedule to watch role
  counts, locations, and seniority across Citadel's offices.
- **Org mapping** — `dataType=leadership` for the current executive roster.
- **Targeted research** — `dataType=search` with a query like `market structure`
  or `options` to pull every matching item across content types.

### Input parameters

| Parameter | Type | Default | Description |
| --------- | ---- | ------- | ----------- |
| `dataType` | enum | `news` | What to scrape: `news`, `jobs`, `leadership`, `career_perspectives`, `search`, `urls` |
| `searchQuery` | string | `market structure` | Keyword(s) for `search` mode |
| `contentTypes` | array | `[]` | Optional search filter (posts, careers, leadership, …) |
| `startUrls` | array | — | Exact URLs to fetch for `urls` mode |
| `language` | enum | `en` | `en`, `ja-jp`, `zh-hans`, or `all` |
| `since` | string | — | ISO date; only items updated on/after it (news/jobs/perspectives) |
| `fetchDetails` | boolean | `true` | Search: fetch full detail per result |
| `maxItems` | integer | `100` | Stop after this many items |
| `proxyConfiguration` | object | off | Optional Apify proxy |

#### Example input

```json
{
  "dataType": "news",
  "language": "en",
  "since": "2025-01-01",
  "maxItems": 50
}
```

#### Example output (one row)

```json
{
  "data_type": "news",
  "url": "https://www.citadelsecurities.com/news-and-insights/elastic-expectations/",
  "title": "Elastic Expectations",
  "description": "…",
  "body": "Full article text …",
  "date_published": "2026-08-18T20:45:02+00:00",
  "category": "Market Structure",
  "authors": ["…"],
  "word_count": 2178,
  "image": "https://www.citadelsecurities.com/…/lead.jpg",
  "language": "en",
  "lastmod": "2026-08-18",
  "scraped_at": "2026-08-23T12:00:00+00:00"
}
```

### Scheduling & integrations

- **Schedule** incremental runs (e.g. daily) from the Apify Console and set
  `since` to only fetch fresh items.
- **Webhooks** — trigger a downstream service on run completion.
- **Export** to JSON, CSV, Excel, or push to Google Sheets, Make, Zapier, or S3.
- **API** — start runs and pull the dataset via the Apify API.

### Use it from an AI assistant (MCP)

This actor works with the Apify MCP server, so AI assistants (Claude, ChatGPT,
VS Code agents) can call it as a tool — e.g. *"Get the latest Citadel Securities
News & Insights articles"* — and receive structured rows back.

### FAQ

**Is there an official API?** No. The WordPress REST API is disabled; this actor
uses the site's public sitemaps and rendered pages.

**Does it get the full article text?** Yes — news and career-perspective rows
include the complete `body`, not just a summary.

**How fresh is the data?** Live — every run fetches current pages. Use `since`
for efficient incremental runs.

**How many items can I get?** The whole public site: hundreds of articles, ~85
open roles, and the leadership roster. Control volume with `maxItems`.

**Do I need a proxy?** Usually not. The actor bypasses Cloudflare in pure Python.
Add a proxy for large or very frequent runs.

**Is scraping this legal?** The actor collects only publicly available pages.
You are responsible for using the data in line with applicable laws and the
site's terms.

**Reliability?** The client rotates browser TLS fingerprints to stay ahead of
Cloudflare, retries transient errors, and checkpoints progress so long runs
resume cleanly.

# Actor input Schema

## `dataType` (type: `string`):

Which Citadel Securities content to extract.

## `searchQuery` (type: `string`):

Keyword(s) to search the site for. Used only when 'What to scrape' is 'Keyword search'.

## `contentTypes` (type: `array`):

Optional filter for keyword search — limit results to these content types. Leave empty to search everything.

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

Exact Citadel Securities page URLs to fetch and parse (news, job, leadership, or page). Used only when 'What to scrape' is 'Specific URLs'.

## `language` (type: `string`):

Which language edition to scrape. Most content is English; Japanese and Simplified Chinese cover a subset.

## `since` (type: `string`):

Optional ISO date (e.g. 2025-01-01). Skips news / jobs / career-perspectives whose sitemap last-modified date is older — ideal for incremental scheduled runs.

## `fetchDetails` (type: `boolean`):

When keyword searching, fetch and parse each result page (full article body, job locations, etc.) instead of just the search-card summary.

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

Stop after collecting this many items.

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

Optional proxy. The site is served through Cloudflare; a datacenter IP is usually fine at moderate rates, but a residential proxy helps for large or frequent runs.

## Actor input object example

```json
{
  "dataType": "news",
  "searchQuery": "market structure",
  "contentTypes": [],
  "startUrls": [
    {
      "url": "https://www.citadelsecurities.com/news-and-insights/elastic-expectations/"
    }
  ],
  "language": "en",
  "fetchDetails": true,
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `dataset` (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": "market structure",
    "startUrls": [
        {
            "url": "https://www.citadelsecurities.com/news-and-insights/elastic-expectations/"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("axlymxp/citadel-securities-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": "market structure",
    "startUrls": [{ "url": "https://www.citadelsecurities.com/news-and-insights/elastic-expectations/" }],
}

# Run the Actor and wait for it to finish
run = client.actor("axlymxp/citadel-securities-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 '{
  "searchQuery": "market structure",
  "startUrls": [
    {
      "url": "https://www.citadelsecurities.com/news-and-insights/elastic-expectations/"
    }
  ]
}' |
apify call axlymxp/citadel-securities-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,axlymxp/citadel-securities-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/ghB3ttiJztFcZp9bu/builds/ZSkGub2r8S7accgXd/openapi.json
