BRVM Market Data — West African Stock Exchange API avatar

BRVM Market Data — West African Stock Exchange API

Pricing

from $0.25 / quotes snapshot

Go to Apify Store
BRVM Market Data — West African Stock Exchange API

BRVM Market Data — West African Stock Exchange API

The only API for BRVM equity data — delayed quotes, 25+ years of price history, indices, and company fundamentals for all ~47 stocks across 8 West African nations (WAEMU).

Pricing

from $0.25 / quotes snapshot

Rating

0.0

(0)

Developer

Simon M

Simon M

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 hours ago

Last modified

Categories

Share

BRVM Market Data

The only structured API for the BRVM — West Africa's regional stock exchange. Get delayed quotes, indices, historical prices, company fundamentals, and official announcements for all ~47 listed equities across 8 WAEMU countries.

What is BRVM?

The Bourse Régionale des Valeurs Mobilières (BRVM) is the single regional stock exchange shared by eight francophone West African nations: Côte d'Ivoire, Senegal, Burkina Faso, Benin, Mali, Niger, Togo, and Guinea-Bissau. Founded in 1998 and headquartered in Abidjan, it is the primary capital market for the West African Economic and Monetary Union (WAEMU).

BRVM equities are not covered by mainstream data providers such as Yahoo Finance or Bloomberg at the retail API tier. This Actor provides the only readily accessible, structured API for BRVM data — pulling directly from brvm.org and the BRVM financial database.

What does BRVM Market Data do?

Five data modes in one Actor:

ModeWhat you get
quotesLatest delayed prices, change, volume for all ~47 equities
indicesBRVM Composite, BRVM 30, and BRVM Prestige index values
historicalDaily close prices and volume per ticker — back to September 1998
companyCompany fundamentals: ISIN, sector, listing date, shares outstanding, market cap
announcementsOfficial issuer press releases and regulatory filings

All data is delayed by ~15 minutes and sourced exclusively from publicly available pages.

Running on the Apify platform gives you scheduling, automatic retries, proxy rotation, monitoring dashboards, and export in JSON, CSV, or Excel — no infrastructure to manage.

Why use BRVM Market Data?

  • Fintech and diaspora investing apps — display portfolio values for users holding BRVM stocks; no other off-the-shelf API covers this exchange
  • Quantitative research — 25+ years of daily price history (6,700+ trading sessions) for emerging African market studies
  • ESG and impact investing — screen WAEMU-listed companies by sector and country across 8 nations in one call
  • Financial dashboards and BI tools — embed BRVM data into Power BI, Tableau, or custom dashboards on a schedule
  • Price monitoring and alerts — run on a schedule, compare to a stored baseline, trigger webhooks on moves

How to use BRVM Market Data

  1. Go to the Actor page on Apify Store and click Try for free
  2. Select a mode from the dropdown (default: quotes)
  3. Optionally enter specific Tickers (e.g. SNTS, SGBC, ETIT) — leave blank for all equities
  4. For historical mode, set Start date and End date; set Max items to cap cost
  5. Click Start — a typical quotes run finishes in under 10 seconds
  6. Download from the Output tab in JSON, CSV, or Excel, or read via the Apify API

Input

FieldTypeDefaultDescription
modeenum"quotes"quotes · indices · historical · company · announcements
tickersstring[]allFilter to specific BRVM symbols, e.g. ["SNTS", "SGBC"]. Leave empty for all.
dateFromstring-30 daysISO date. historical mode only.
dateTostringtodayISO date. historical mode only.
maxItemsinteger1000Hard cap on output records — directly bounds cost.

Quotes (all 47 equities):

{ "mode": "quotes" }

Filtered quotes (3 tickers):

{ "mode": "quotes", "tickers": ["SNTS", "ETIT", "SGBC"] }

Historical (one ticker, full year, capped at 300 rows):

{
"mode": "historical",
"tickers": ["SNTS"],
"dateFrom": "2024-01-01",
"dateTo": "2024-12-31",
"maxItems": 300
}

Output

All modes push records to the default Apify Dataset. Download as JSON, CSV, or Excel from the Output tab.

Every record includes source, fetched_at, and delay_minutes: 15.

quotes

{
"ticker": "SNTS",
"isin": "SN0000000019",
"name": "SONATEL SENEGAL",
"country": "SN",
"sector": "Telecommunications",
"currency": "XOF",
"last": 28500,
"previous_close": 28900,
"change": -400,
"change_pct": -1.38,
"volume": 2514,
"value_xof": 71673000,
"trading_date": "2026-05-22",
"source": "brvm.org",
"fetched_at": "2026-05-28T11:04:00.000Z",
"delay_minutes": 15
}

indices

{
"code": "BRVMC",
"name": "BRVM Composite",
"value": 223.08,
"change": 1.46,
"change_pct": 0.66,
"trading_date": "2026-05-28",
"source": "brvm.org",
"fetched_at": "2026-05-28T11:04:00.000Z",
"delay_minutes": 15
}

Index codes: BRVMC (Composite), BRVM30, BRVMPR (Prestige).

historical

{
"ticker": "SNTS",
"date": "2026-05-22",
"open": 28900,
"high": 28900,
"low": 28500,
"close": 28500,
"volume": 2514,
"source": "brvm.org",
"fetched_at": "2026-05-28T11:04:00.000Z",
"delay_minutes": 15
}

Note on OHLCV: The BRVM publishes only daily closing prices and volumes — no intraday ticks. open is set to the previous session's closing price; high and low are derived from open and close. For long-term trend analysis this is accurate; for intraday range analysis it is not.

company

{
"ticker": "SNTS",
"isin": "SN0000000019",
"name": "SONATEL SENEGAL",
"country": "SN",
"sector": "Telecommunications",
"listing_date": "1998-09-16",
"shares_outstanding": 100000000,
"market_cap_xof": 2850000000000,
"website": "https://www.sonatel.sn",
"source": "brvm.org",
"fetched_at": "2026-05-28T11:04:00.000Z",
"delay_minutes": 15
}

announcements

{
"ticker": "SNTS",
"title": "SNTS | Notation financière",
"published_at": "2025-07-07",
"url": "https://www.brvm.org/sites/default/files/...",
"summary": null,
"source": "brvm.org",
"fetched_at": "2026-05-28T11:04:00.000Z"
}

Field reference — quotes mode

FieldDescription
tickerBRVM symbol (e.g. SNTS)
isin12-character ISIN code
nameFull registered company name
countryISO 3166-1 alpha-2 country of incorporation
sectorSector classification
currencyAlways XOF (West African CFA franc)
lastLast traded price in XOF
previous_closePrior session closing price
changelast − previous_close
change_pctPercentage change
volumeShares traded in the session
value_xofApproximate turnover (volume × last)
trading_dateISO date of the session

Scheduling

BRVM trading hours are 09:00–15:00 GMT, Monday–Friday. Use the Apify Scheduler to run on a cron expression:

GoalCron expressionCost/month (all tickers)
Every 15 min during trading hours*/15 9-15 * * 1-5~$22
Every 30 min during trading hours*/30 9-15 * * 1-5~$11
Once per trading day (open)0 9 * * 1-5~$1.10
Weekly snapshot0 9 * * 1~$0.25

Combine a quotes run with a webhook to trigger downstream processing when new data arrives.

Pricing

This Actor uses Pay-Per-Event pricing — you pay per data record, not per CPU-minute.

EventPriceWhen
apify-actor-start$0.00005Every run (covers ~5 s compute)
quotes-snapshot$0.25Once per unfiltered quotes run (~47 records)
quote-filtered$0.05Per ticker when using the tickers filter
index-snapshot$0.10Once per indices run (3 records)
historical-row$0.01Per daily row
company-record$0.10Per company
announcement$0.01Per announcement

Cost examples:

  • Full quotes snapshot (all 47 equities, once): $0.25
  • 5 filtered tickers (quotes): 5 × $0.05 = $0.25
  • One year of history for 1 ticker (~250 rows): $2.50
  • Full historical dataset (47 tickers × 6,700 days): ~$3,150 — use maxItems and ticker filters to stay within budget

API usage

JavaScript / Node.js:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('malmon/brvm-market-data').call({
mode: 'quotes',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python:

from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("malmon/brvm-market-data").call(
run_input={"mode": "quotes"}
)
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)

curl:

curl -X POST \
"https://api.apify.com/v2/acts/malmon~brvm-market-data/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode":"quotes"}'

For AI agents

This Actor is available via the Apify MCP server at mcp.apify.com. Call it with {"mode": "quotes"} for a full market snapshot or {"mode": "historical", "tickers": ["SNTS"], "dateFrom": "2025-01-01", "dateTo": "2025-12-31"} for historical data. Supports agentic payments via x402 and Skyfire.

FAQ

Is this data real-time? No. All data carries a ~15-minute delay per BRVM's public data policy. Do not use it for live execution decisions.

How far back does historical data go? The BRVM financial database holds records from September 1998 (the exchange's founding). That is 6,700+ trading sessions as of 2026.

Where does the data come from? quotes, indices, company, and announcements are sourced from brvm.org. historical prices come from bfin.brvm.org, the BRVM's own financial database. No login-gated or paid data sections are accessed.

Is scraping brvm.org permitted? The Actor scrapes only publicly available pages, without authentication, at a maximum rate of one request per second, and identifies itself via a User-Agent header. Users are responsible for compliance with brvm.org's Terms of Service and applicable law in their jurisdiction.

What countries and currencies are covered? All eight WAEMU member states: Côte d'Ivoire, Senegal, Burkina Faso, Benin, Mali, Niger, Togo, Guinea-Bissau. All prices are in XOF (West African CFA franc).

Why are open/high/low the same in some historical rows? The BRVM publishes only daily close prices and volumes — no intraday data. open approximates the previous session's close; if the price did not move, open = high = low = close. See the note in the historical output section above.

Known limitations:

  • No real-time or order book data
  • ISIN codes may be null for some tickers in quotes mode if the company page is unavailable
  • company mode financial fields (shares_outstanding, market_cap_xof) may be null if not published on the issuer's page

Issues and feature requests: Report on the Issues tab or via the Apify console.