What is an SCPI? French real-estate funds explained, and how to get SCPI data programmatically
SCPI definition, capital fixe vs variable, prix de souscription and retrait, taux de distribution, TOF, the documents, and the /api/v1/scpi endpoint.Published 19 September 2026 · 6 min read · by FundFacts APIAn SCPI (société civile de placement immobilier) is a French collective investment vehicle that buys and manages a portfolio of rental property, mostly offices, retail, healthcare and logistics, and passes the rents to its shareholders as quarterly distributions. Investors buy shares (parts) at a subscription price set by the management company rather than on an exchange, and the fund is regulated by the AMF, which approves the société de gestion and the note d'information. SCPI data lives in quarterly bulletins, an annual report and a PRIIPs DIC, all in French; FundFacts API reads those documents and returns them as JSON from GET /api/v1/scpi/{idOrIsin}.
How an SCPI works
An SCPI pools investor money to buy buildings and lease them out. The société de gestion (an AMF-approved portfolio management company) selects, buys, manages and sells the properties, collects the rents, and pays out most of the net income to shareholders, typically as quarterly acomptes. Shares are held directly, through a French assurance-vie contract, or in some cases on credit. Unlike a listed real-estate company, the share price does not move minute by minute; it is set by the manager within a band around the appraised value of the portfolio.
Two structures exist:
- Capital variable. The SCPI issues new shares continuously at the prix de souscription and buys them back at the prix de retrait when an investor wants out, matching withdrawals against new subscriptions. When there are more sellers than buyers, redemption requests queue up as parts en attente de retrait, which is the number to watch for liquidity.
- Capital fixe. Capital is raised in periodic increases; between them, shares trade on a secondary market organised by the manager, where the price is set by matching orders.
An SCPI is an alternative investment fund under French law, not a UCITS: it holds direct real estate, which the UCITS Directive excludes. The UCITS post explains that boundary. What SCPIs share with UCITS is the PRIIPs key information document, called DIC (document d'informations clés) in France, with the same 1–7 risk indicator and cost table.
The numbers that describe an SCPI
| Term | Meaning | API field |
|---|---|---|
| Prix de souscription | Price of one new share, EUR, including the subscription fee | keyFacts.sharePriceEur |
| Prix de retrait | Amount paid back per share on withdrawal (capital variable), EUR | keyFacts.withdrawalPriceEur |
| Commission de souscription | Entry fee as a percent of the subscription price, read from the DIC when present | keyFacts.subscriptionFeesPct |
| Commission de gestion | Management fee as a percent of rental income | keyFacts.managementFeesPct |
| Capitalisation | Subscription price × shares outstanding, EUR | keyFacts.capitalisationEur |
| Taux de distribution (TD) | Gross annual distribution per share divided by the share price, percent, per calendar year | performance.distributionRateByYear |
| Dividende brut par part | Gross distribution per share for the year, EUR | performance.distributionPerShareByYear |
| TRI 5 / 10 / 15 ans | Internal rate of return over 5, 10 and 15 years, when the manager publishes it | performance.tri.y5, .y10, .y15 |
| Valeur de reconstitution | What it would cost to rebuild the portfolio today, per share (appraisal value plus costs) | performance.reconstitutionValueEur |
| Valeur de réalisation | Net asset value per share if the portfolio were sold | performance.realisationValueEur |
| Taux d'occupation financier (TOF) | Rents collected as a percent of rents collectable if fully let | portfolio.financialOccupancyRatePct |
| WALB / WALT | Average remaining lease term to break / to expiry, years | portfolio.walbYears, portfolio.waltYears |
| Parts en attente de retrait | Shares queued for withdrawal, the liquidity indicator | liquidity.sharesAwaitingWithdrawal |
| Collecte nette | Net inflow of the quarter, EUR | liquidity.netInflowLastQuarterEur |
| Délai de jouissance | Delay before a new share starts earning distributions | keyFacts.delayOfJouissance |
Two readings that catch newcomers. The taux de distribution is a yield on the share price, not a total return: the share price can also be revised up or down, and the TRI is the figure that combines both. And the subscription price is bounded by regulation to a band around the valeur de reconstitution, so comparing sharePriceEur with reconstitutionValueEur tells you whether the shares are priced above or below the appraised portfolio, which is the SCPI equivalent of a premium or discount to NAV.
Where the data comes from
Every SCPI publishes a fixed set of documents, and the numbers above come from them:
- Bulletin trimestriel d'information (sometimes semi-annual): the quarter's headline figures, distribution, TOF, sector and geographic splits, collecte, parts en attente. This is the freshest source and sets
dataAsOfandbulletinPeriod. - DIC: the PRIIPs KID, with the risk indicator (
keyFacts.riskIndicator) and the entry-cost line. - Rapport annuel: audited figures, the valeur de reconstitution and réalisation, the property list, tenants.
- Note d'information visée par l'AMF and the statuts: terms, fees, délai de jouissance, minimum subscription.
- The SCPI's page on the manager's site, and a fiche produit when it exists.
The API returns links to each of these in documents.bulletinUrl, documents.kidUrl, documents.annualReportUrl, documents.noteInformationUrl, documents.statutsUrl, documents.factsheetUrl and documents.productUrl, so a product can always point back at the source page. Figures are read from these public regulatory documents published by the management company; no aggregator is involved.
Getting SCPI data as JSON
The endpoint takes a slug, an ISIN or a name. Slugs are stable identifiers such as perial-o2 or corum-origin; when you do not know one, the search endpoint finds it and is free:
bashcurl "https://fundfactsapi.com/api/v1/scpi?q=epargne%20pierre" \-H "Authorization: Bearer ffk_live_..."
Then the SCPI itself:
bashcurl https://fundfactsapi.com/api/v1/scpi/perial-o2 \-H "Authorization: Bearer ffk_live_..."
json{"slug": "perial-o2","isin": "FR0011254991","name": "Perial O2","manager": "perial","cached": true,"generatedAt": "2026-09-19T05:40:12.000Z","expiresAt": "2026-09-20T05:40:12.000Z","plan": "starter","data": {"keyFacts": {"name": "Perial O2","managementCompany": "PERIAL Asset Management","category": "bureaux","capitalType": "variable","sharePriceEur": 164,"withdrawalPriceEur": 150.06,"subscriptionFeesPct": 10.2,"riskIndicator": 4,"labelIsr": true},"performance": {"distributionRateByYear": [{ "year": "2024", "value": 4.91 }, { "year": "2025", "value": 4.65 }],"reconstitutionValueEur": 143.65,"realisationValueEur": 113.55},"portfolio": {"numberOfProperties": 135,"financialOccupancyRatePct": 84.6,"sectorSplit": [{ "label": "Bureaux", "weight": 84.7 }],"geographicSplit": [{ "label": "Île-de-France", "weight": 35.6 }]},"liquidity": { "sharesAwaitingWithdrawal": 0, "sharesOutstanding": 14643842 },"documents": { "bulletinUrl": "https://…/bulletin-t2-2026.pdf", "kidUrl": "https://…/dic.pdf" },"dataAsOf": "2026-06-30","bulletinPeriod": "T2 2026"}}
The values are those of the SCPI field reference examples and stand for the shape; a live call returns whatever the latest bulletin states. Numbers are numbers (EUR, percent), not formatted strings, because the bulletins print them consistently enough to parse; null means the documents do not state the line.
In Python, reading the two figures most dashboards show:
pythonimport requestsr = requests.get("https://fundfactsapi.com/api/v1/scpi/perial-o2",headers={"Authorization": "Bearer ffk_live_..."}, timeout=120)d = r.json()["data"]td = d["performance"]["distributionRateByYear"]print(td[-1]["year"], td[-1]["value"], "%") # latest full-year taux de distributionprint(d["keyFacts"]["sharePriceEur"], "vs", d["performance"]["reconstitutionValueEur"])print(d["liquidity"]["sharesAwaitingWithdrawal"], "parts en attente")print(d["dataAsOf"], d["bulletinPeriod"])
Freshness and cost
A cold load reads the manager's page, the bulletin, the DIC and the annual report and takes some tens of seconds; after that the payload is stored for 24 hours and served immediately. Bulletins are quarterly, so dataAsOf moves four times a year for most SCPIs even though the payload is refreshed daily. One call costs one request on any plan, including Free (150 requests a month), and the same data is available to AI assistants through the get_scpi and search_scpi tools of the MCP server.
Coverage is by management company: the endpoint currently reads SCPIs from a set of French managers whose sites and documents it knows how to parse, and returns scpi_not_found for the rest. GET /api/v1/scpi?q= shows what is in the universe. If you also handle UCITS funds and ETFs, the fund endpoint sits next to it with the same authentication and quota, so one key covers both universes.
To see it on a real SCPI, create a free key and search for a name you know.
FAQ
Is an SCPI the same as a REIT?
Both hold rental property and distribute most of their income, but a REIT (in France, a SIIC) is a listed company whose shares trade on an exchange at a market price, while an SCPI is an unlisted fund whose shares are subscribed and withdrawn at prices set by the management company within a regulated band around the appraised value.
What is the taux de distribution of an SCPI?
The gross distribution paid per share over a calendar year divided by the share price at the start of that year, expressed as a percent. It is a yield, not a total return; the TRI (internal rate of return) also accounts for changes in the share price.
What does 'parts en attente de retrait' mean?
For a capital-variable SCPI it is the number of shares whose holders have asked to withdraw but have not yet been matched with new subscriptions. A rising figure signals that exiting may take time. The API returns it as liquidity.sharesAwaitingWithdrawal.
Can I get SCPI data by ISIN?
Yes, when the SCPI has one; most French SCPIs carry an FR-prefixed ISIN and GET /api/v1/scpi/{isin} accepts it. Slugs (for example perial-o2) and names also work, and GET /api/v1/scpi?q= returns the slug and ISIN for a name.
How often do SCPI figures change?
Most figures come from the quarterly bulletin, so they move four times a year; valuation figures come from the annual report. The API refreshes its stored payload every 24 hours and reports the bulletin's period in bulletinPeriod and its date in dataAsOf.