European Net Short Positions Scraper (Short Selling)
Pricing
from $10.20 / 1,000 results
European Net Short Positions Scraper (Short Selling)
Aggregate disclosed net short positions in EU shares from national regulators (France AMF, Germany BaFin): position holder, issuer, ISIN, net short percent, position date, regulator and current-vs-historical flag. Filter by holder, issuer, regulator and date. Export to JSON, CSV or Excel.
Pricing
from $10.20 / 1,000 results
Rating
0.0
(0)
Developer
Scrapers Lat
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
European Net Short Positions Scraper (Short Selling)
Here is one real result, with every field the actor returns:
{"positionHolder": "AQR CAPITAL MANAGEMENT, LLC","positionHolderLei": "549300GC5MDF1KXYMP06","issuerName": "PERNOD RICARD","isin": "FR0000120693","netShortPositionPct": 0.79,"positionDate": "2026-08-06","publicationDate": "2026-08-07","isCurrent": true,"country": "France","regulator": "AMF","source": "EU National Regulators (Net Short Position disclosures)","observedAt": "2026-08-10T14:36:45.301Z"}
The most complete European net short position scraper available. It aggregates the short-selling disclosures that national regulators publish under the EU Short Selling Regulation into one normalized feed, including the position holder and its LEI, the issuer and ISIN, the exact percentage and dates, and gives you six filters to target exactly the disclosures you need.
📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples
Table of contents
- What it does
- Quickstart
- Input reference
- Output reference
- Example output record
- Run via API and CLI
- Fetch results
- Billing and limits
- FAQ and troubleshooting
What it does
The actor pulls the official net short position disclosures published by national regulators under the EU Short Selling Regulation, aggregates them into one feed, applies the filters you pass as input, and writes one normalized record per disclosed position to the run's dataset. Each record carries the position holder and its Legal Entity Identifier, the issuer and ISIN, the net short position as a percentage of issued share capital, the position and publication dates, and whether the position is currently open. Missing source values are returned as null and never invented.
Coverage currently spans France (AMF) and Germany (BaFin). Positions can be current (still open), historical (closed), or both.
Quickstart
Open the actor, paste this into the input, and press Run. It returns up to 10 current positions from both regulators.
{"regulators": ["france", "germany"],"positionStatus": "current","maxPositions": 50}
Every filter is optional. Free plans return up to 10 positions per run.
Input reference
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
regulators | string[] | no | ["france","germany"] | Which national regulators to aggregate: france (AMF), germany (BaFin). Empty for all supported regulators. |
positionStatus | enum | no | current | current (open positions still disclosed), historical (closed / past disclosures), or all (both). |
holderNames | string[] | no | [] | Keep only these position holders, matched as partial names, for example BlackRock, Marshall Wace. |
issuerQueries | string[] | no | [] | Keep only these issuers, by name or ISIN, for example Lanxess, DE0005470306. |
minPositionPct | number | no | (none) | Keep only positions at or above this percentage of issued share capital, for example 0.5. |
dateFrom | string | no | (empty) | Only positions with a position date on or after this date (YYYY-MM-DD). |
dateTo | string | no | (empty) | Only positions with a position date on or before this date (YYYY-MM-DD). |
maxPositions | integer | no | 50 | Maximum number of net short positions to collect. Free Apify plans are capped at 10 per run. |
Filters combine with logical AND.
Output reference
One dataset item per disclosed net short position. Types: string, number, boolean, or null when the source value is absent.
| Field | Type | Description |
|---|---|---|
positionHolder | string | Name of the fund or firm holding the net short position. |
positionHolderLei | string | Legal Entity Identifier of the position holder, or null when not published. |
issuerName | string | Name of the issuer whose shares are shorted. |
isin | string | ISIN of the shorted security. |
netShortPositionPct | number | Net short position as a percentage of issued share capital. |
positionDate | string | Date the position was held (YYYY-MM-DD). |
publicationDate | string | Date the regulator published the disclosure (YYYY-MM-DD). |
isCurrent | boolean | true if the position is currently open, false if it is a historical (closed) disclosure. |
country | string | Country of the disclosing regulator, for example France, Germany. |
regulator | string | Regulator code, for example AMF, BaFin. |
source | string | Always EU National Regulators (Net Short Position disclosures). |
observedAt | string | ISO 8601 timestamp of when the record was collected. |
error | string | null on success. On a failed run, a single item with a populated error field is written instead. |
Example output record
Real record from a live run (input {"regulators":["germany"],"positionStatus":"current"}):
{"positionHolder": "Citadel Advisors LLC","positionHolderLei": null,"issuerName": "Carl Zeiss Meditec AG","isin": "DE0005313704","netShortPositionPct": 0.59,"positionDate": "2026-08-07","publicationDate": "2026-08-07","isCurrent": true,"country": "Germany","regulator": "BaFin","source": "EU National Regulators (Net Short Position disclosures)","observedAt": "2026-08-10T14:36:49.392Z"}
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:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~europe-net-short-positions-scraper/run-sync-get-dataset-items?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"regulators":["germany"],"minPositionPct":0.5,"maxPositions":100}'
Start a run asynchronously:
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~europe-net-short-positions-scraper/runs?token=<TOKEN>" \-H "Content-Type: application/json" \-d '{"holderNames":["Marshall Wace"],"positionStatus":"all"}'
Apify CLI:
apify call scrapers_lat/europe-net-short-positions-scraper \--input '{"issuerQueries":["Lanxess"],"positionStatus":"all"}'
Fetch results
Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:
# JSONcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"# CSVcurl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"# Paginate large datasetscurl "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 position returned (
resultevent). See the pricing tab for the current per-result price. - No charge on failure. If a run errors, the actor writes a single item with a populated
errorfield and does not charge for it. Empty runs cost nothing. - Spend cap respected. Set
maxTotalChargeUsdon the run; once reached, the actor stops emitting and charging further billable results. - Free Apify plans are capped at 10 positions per run. Upgrade for higher
maxPositions.
FAQ and troubleshooting
A run returned 0 records. Why?
The filter combination matched nothing. Remove a holderNames or issuerQueries filter, lower minPositionPct, or set positionStatus to all. Zero-result runs are not charged.
What is the difference between current and historical positions?
Current positions are still open and above the disclosure threshold. Historical positions are past disclosures that have since been closed or reduced below the threshold. Use positionStatus to choose.
Why is positionHolderLei null?
Not every regulator publishes the holder's Legal Entity Identifier. When it is not published, the field is returned as null.
Which countries are covered?
France (AMF) and Germany (BaFin). Select one with regulators, or leave it empty for both.
How do I track a specific fund or issuer?
Use holderNames for the fund (partial match) or issuerQueries for the issuer name or ISIN.
Is this an official regulator tool? No. This actor is independent and has no affiliation with the AMF, BaFin or ESMA. It reads only disclosures that these regulators publish. Use it in accordance with each regulator's terms.
Related scrapers
- SEC 13F Holdings Scraper: US institutional equity holdings.
- SEC Form 4 Insider Trades Scraper: US insider transactions.
- ESMA Financial Registers Scraper: EU financial instrument and firm registers.
- GLEIF LEI Company Records Scraper: global Legal Entity Identifier records.
- EU Sanctions List Scraper: EU consolidated sanctions list of persons and entities.
More scrapers at scrapers.lat
Built and maintained by scrapers.lat, where we publish scrapers for US, European and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.
Independent tool, not affiliated with the AMF, BaFin or ESMA. Accesses only publicly available net short position disclosures. Use in accordance with each regulator's terms.
