<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: SM</title>
    <description>The latest articles on DEV Community by SM (@malmon).</description>
    <link>https://dev.to/malmon</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3957073%2F49b8d322-c075-4b49-bc48-dc644c9bb2e1.png</url>
      <title>DEV Community: SM</title>
      <link>https://dev.to/malmon</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/malmon"/>
    <language>en</language>
    <item>
      <title>BRVM Market Data : l'API qui existait enfin pour la bourse d'Afrique de l'Ouest</title>
      <dc:creator>SM</dc:creator>
      <pubDate>Fri, 29 May 2026 12:59:02 +0000</pubDate>
      <link>https://dev.to/malmon/brvm-market-data-lapi-qui-existait-enfin-pour-la-bourse-dafrique-de-louest-41jp</link>
      <guid>https://dev.to/malmon/brvm-market-data-lapi-qui-existait-enfin-pour-la-bourse-dafrique-de-louest-41jp</guid>
      <description>&lt;p&gt;Si vous avez déjà essayé d'accéder aux &lt;strong&gt;données boursières de la BRVM&lt;/strong&gt; de manière programmatique, vous connaissez déjà le problème. Il n'existe pas de terminal Bloomberg pour l'Afrique de l'Ouest. Yahoo Finance couvre Sonatel de temps en temps, quand ça lui convient. Le site de la BRVM lui-même est une page HTML mise à jour manuellement. Et tout développeur qui a cherché une &lt;strong&gt;API fiable pour les données boursières de l'Afrique de l'Ouest&lt;/strong&gt; est reparti les mains vides.&lt;/p&gt;

&lt;p&gt;Jusqu'à maintenant.&lt;/p&gt;

&lt;blockquote&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;⚠️ Mise à jour (mai 2026) — accès temporairement suspendu.&lt;/strong&gt; L'API BRVM Market Data est momentanément indisponible. Nous finalisons un accord de licence de redistribution des données avec la BRVM afin d'offrir ce service dans un cadre pleinement autorisé. Cet article reste en ligne à titre informatif ; l'accès sera rétabli une fois la licence en place.
&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Qu'est-ce que la BRVM ?
&lt;/h2&gt;

&lt;p&gt;La &lt;strong&gt;Bourse Régionale des Valeurs Mobilières (BRVM)&lt;/strong&gt; est la place boursière régionale qui dessert les huit pays membres de l'UEMOA : la Côte d'Ivoire, le Sénégal, le Burkina Faso, le Bénin, le Mali, le Niger, le Togo et la Guinée-Bissau. Elle regroupe ~47 valeurs cotées, parmi lesquelles certaines des entreprises les plus importantes d'Afrique francophone :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sonatel&lt;/strong&gt; (filiale d'Orange en Afrique de l'Ouest) — Sénégal&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ecobank Transnational&lt;/strong&gt; — banque panafricaine&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SOLIBRA&lt;/strong&gt; (filiale de Heineken) — Côte d'Ivoire&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;BOAD&lt;/strong&gt; (Banque Ouest Africaine de Développement, obligations)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PALMCI&lt;/strong&gt; (huile de palme) — Côte d'Ivoire&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La BRVM est opérationnelle depuis 1998, ce qui signifie que plus de &lt;strong&gt;25 ans d'historique de cours&lt;/strong&gt; sont aujourd'hui enfermés derrière un site web sans API — jusqu'à maintenant.&lt;/p&gt;




&lt;h2&gt;
  
  
  Ce que couvre l'API
&lt;/h2&gt;

&lt;p&gt;L'&lt;a href="https://apify.com/malmon/brvm-market-data" rel="noopener noreferrer"&gt;API BRVM Market Data&lt;/a&gt; propose cinq modes de données en un seul outil :&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Cours en différé
&lt;/h3&gt;

&lt;p&gt;Les prix actuels des ~47 valeurs cotées, mis à jour avec un décalage de 15 minutes pendant les heures de cotation (lun–ven, 09h00–15h00 GMT). Chaque enregistrement inclut :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dernier cours, clôture précédente, variation en %&lt;/li&gt;
&lt;li&gt;Volume et montant échangé en XOF&lt;/li&gt;
&lt;li&gt;Ticker, ISIN, nom de la société, pays, secteur&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Indices boursiers
&lt;/h3&gt;

&lt;p&gt;Tous les indices BRVM en un seul appel : &lt;strong&gt;BRVM Composite&lt;/strong&gt;, &lt;strong&gt;BRVM 30&lt;/strong&gt;, &lt;strong&gt;BRVM Prestige&lt;/strong&gt;, ainsi que les indices sectoriels disponibles. Indispensable pour suivre le marché dans son ensemble.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Données historiques OHLCV
&lt;/h3&gt;

&lt;p&gt;Cours journaliers open/high/low/close/volume sur plus de 25 ans pour n'importe quelle valeur cotée. C'est ce jeu de données qui n'existait tout simplement nulle part ailleurs dans un format structuré et propre.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Données fondamentales des sociétés
&lt;/h3&gt;

&lt;p&gt;ISIN, secteur, pays, capitalisation boursière, nombre d'actions en circulation et informations de cotation pour chaque entreprise de la cote.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Avis et annonces des émetteurs
&lt;/h3&gt;

&lt;p&gt;Accès structuré aux annonces de la BRVM — publications de résultats, avis de dividendes, gouvernance — avec titre, date et lien direct.&lt;/p&gt;




&lt;h2&gt;
  
  
  À qui s'adresse cette API ?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Développeurs fintech au service de la diaspora africaine
&lt;/h3&gt;

&lt;p&gt;On estime à plus de 3 millions le nombre de ressortissants d'Afrique de l'Ouest vivant en France, en Belgique, au Canada et aux États-Unis, avec une capacité d'investissement réelle dans leurs marchés d'origine. Les applications de type plateforme d'investissement pour la diaspora, outils de transfert avec fonctionnalité d'investissement, ou tableaux de bord de portefeuille ont besoin de ces données — et jusqu'ici n'avaient aucun moyen propre d'y accéder.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Usage typique :&lt;/strong&gt; interroger l'endpoint des cours 2 à 4 fois par jour pendant les heures de cotation, alimenter un tableau de bord ou envoyer des alertes de prix.&lt;/p&gt;

&lt;h3&gt;
  
  
  Chercheurs et analystes quantitatifs
&lt;/h3&gt;

&lt;p&gt;Les marchés actions d'Afrique de l'Ouest sont très peu étudiés dans la recherche académique en finance. Corrélation avec les marchés mondiaux, effets de change sur les rendements libellés en XOF, rotations sectorielles — rien de tout cela n'a été correctement documenté, faute de données accessibles. 25 ans de données OHLCV journalières pour 47 valeurs représentent un jeu de données significatif pour tout chercheur travaillant sur les marchés frontières.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Usage typique :&lt;/strong&gt; un backfill historique unique par valeur, puis des mises à jour quotidiennes. L'historique complet sur 25 ans pour les 47 tickers représente environ 430 000 lignes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Agents IA et pipelines automatisés
&lt;/h3&gt;

&lt;p&gt;Les agents de recherche financière, les outils de synthèse de marché basés sur des LLM et les pipelines de reporting automatisés ont de plus en plus besoin de données structurées sur des marchés non couverts par les sources habituelles. L'API BRVM est compatible avec tout système capable d'appeler un endpoint HTTP et de parser du JSON — y compris les frameworks IA comme LangChain, les workflows n8n ou Make.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Usage typique :&lt;/strong&gt; exécutions planifiées alimentant une base de données vectorielle ou générant des synthèses quotidiennes du marché.&lt;/p&gt;

&lt;h3&gt;
  
  
  Analystes des marchés de capitaux africains
&lt;/h3&gt;

&lt;p&gt;Les banques d'investissement, fonds de pension et institutions de financement du développement opérant dans l'espace UEMOA (BAD, IFC, Proparco, BOAD) produisent des recherches sur les actions de la zone. Leurs analystes récupèrent aujourd'hui les données manuellement depuis le site de la BRVM. Un accès API structuré économise des heures par rapport.&lt;/p&gt;




&lt;h2&gt;
  
  
  Une note sur la fraîcheur des données
&lt;/h2&gt;

&lt;p&gt;Pour être transparent : il ne s'agit &lt;strong&gt;pas d'un flux en temps réel&lt;/strong&gt;. Les données sont décalées d'environ 15 minutes pendant les heures de cotation, et proviennent des pages publiques de brvm.org. Les snapshots de fin de séance sont les données les plus fiables et les plus utilisées.&lt;/p&gt;

&lt;p&gt;Si vous avez besoin de données tick à tick ou infraseconde, il vous faut un flux direct sous licence auprès de la bourse — ce qui existe mais coûte significativement plus cher et nécessite un accord commercial. Pour la grande majorité des cas d'usage (tableaux de bord, recherche, pipelines IA, alertes), des données décalées de 15 minutes sont amplement suffisantes.&lt;/p&gt;




&lt;h2&gt;
  
  
  Comment l'utiliser
&lt;/h2&gt;

&lt;p&gt;L'API est disponible sur l'Apify Store. Vous pouvez l'appeler via :&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JavaScript :&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ApifyClient&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;apify-client&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ApifyClient&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;token&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;VOTRE_TOKEN&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;run&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;actor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;VOTRE_ACTOR_ID&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;quotes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;items&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;defaultDatasetId&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;listItems&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Python :&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;apify_client&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ApifyClient&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ApifyClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;VOTRE_TOKEN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;actor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;VOTRE_ACTOR_ID&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run_input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mode&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;quotes&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;defaultDatasetId&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;iterate_items&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;curl :&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s2"&gt;"https://api.apify.com/v2/acts/VOTRE_ACTOR_ID/runs?token=VOTRE_TOKEN"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"mode": "quotes"}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Tarification
&lt;/h2&gt;

&lt;p&gt;L'API utilise une tarification au paiement par événement sur Apify :&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Ce que vous obtenez&lt;/th&gt;
&lt;th&gt;Prix&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Snapshot complet du marché (~47 cours)&lt;/td&gt;
&lt;td&gt;0,25 $ par exécution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cours d'une valeur spécifique (filtré)&lt;/td&gt;
&lt;td&gt;0,05 $ par ticker&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tous les indices&lt;/td&gt;
&lt;td&gt;0,10 $ par exécution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ligne OHLCV historique&lt;/td&gt;
&lt;td&gt;0,01 $ par ligne&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Données fondamentales d'une société&lt;/td&gt;
&lt;td&gt;0,10 $ par société&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Annonce émetteur&lt;/td&gt;
&lt;td&gt;0,01 $ par annonce&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Un tableau de bord interrogeant le marché complet 4 fois par jour représente environ &lt;strong&gt;22 $/mois&lt;/strong&gt;. Un backfill historique complet pour une valeur (25 ans ≈ 6 500 lignes) coûte &lt;strong&gt;65 $&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Un niveau gratuit est disponible pour les nouveaux utilisateurs.&lt;/p&gt;




&lt;h2&gt;
  
  
  Pourquoi ça n'existait pas avant
&lt;/h2&gt;

&lt;p&gt;La réponse honnête : la BRVM couvre un univers de cotation relativement restreint sur des marchés que les grands fournisseurs de données mondiaux considèrent comme secondaires. Bloomberg, Refinitiv et FactSet concentrent leurs développements sur les bourses avec des milliers de sociétés cotées et des millions de transactions quotidiennes. Les 47 valeurs de la BRVM et sa liquidité modeste passent sous leur radar.&lt;/p&gt;

&lt;p&gt;Cela crée un manque particulièrement douloureux pour les personnes qui ont précisément besoin de ces données — développeurs fintech africains, investisseurs de la diaspora, chercheurs sur les marchés frontières — et qui n'ont de toute façon pas le budget pour un terminal Bloomberg.&lt;/p&gt;




&lt;h2&gt;
  
  
  Pour commencer
&lt;/h2&gt;

&lt;p&gt;→ &lt;a href="https://apify.com/malmon/brvm-market-data" rel="noopener noreferrer"&gt;API BRVM Market Data sur l'Apify Store&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;Service temporairement indisponible&lt;/strong&gt; — une licence de redistribution des données est en cours d'obtention auprès de la BRVM. L'accès sera rétabli prochainement.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Les données proviennent des pages publiques de brvm.org. Tous les prix sont en XOF (franc CFA d'Afrique de l'Ouest). Cette API n'est ni affiliée à la BRVM ni approuvée par elle. Les données sont fournies à titre informatif et ne sont pas adaptées à la prise de décisions de trading automatisé.&lt;/p&gt;

</description>
      <category>api</category>
      <category>data</category>
      <category>programming</category>
      <category>showdev</category>
    </item>
    <item>
      <title>BRVM Market Data: The API That Finally Exists for West Africa's Stock Exchange</title>
      <dc:creator>SM</dc:creator>
      <pubDate>Thu, 28 May 2026 17:30:52 +0000</pubDate>
      <link>https://dev.to/malmon/brvm-market-data-the-api-that-finally-exists-for-west-africas-stock-exchange-547</link>
      <guid>https://dev.to/malmon/brvm-market-data-the-api-that-finally-exists-for-west-africas-stock-exchange-547</guid>
      <description>&lt;p&gt;If you've ever tried to get programmatic access to &lt;strong&gt;BRVM stock data&lt;/strong&gt;, you already know the problem. There's no Bloomberg terminal for West Africa. Yahoo Finance covers Sonatel sometimes, when it feels like it. The BRVM website itself is a manually-updated HTML page. And any developer who's gone looking for a clean, reliable API for &lt;strong&gt;West African equity data&lt;/strong&gt; has come back empty-handed.&lt;/p&gt;

&lt;p&gt;Until now.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;⚠️ Update (May 2026) — access temporarily suspended.&lt;/strong&gt; The BRVM Market Data API is currently unavailable. We're finalizing a data-redistribution licensing agreement with the BRVM so the service can operate on a fully authorized basis. This article remains online for reference; access will be restored once licensing is in place.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What Is the BRVM?
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;Bourse Régionale des Valeurs Mobilières (BRVM)&lt;/strong&gt; is the regional stock exchange serving the eight WAEMU nations: Côte d'Ivoire, Senegal, Burkina Faso, Benin, Mali, Niger, Togo, and Guinea-Bissau. It lists ~47 equities, including some of West Africa's most significant companies:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sonatel&lt;/strong&gt; (Orange's West Africa subsidiary) — Senegal&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ecobank Transnational&lt;/strong&gt; — Pan-African banking&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SOLIBRA&lt;/strong&gt; (Heineken subsidiary) — Côte d'Ivoire&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;BOAD&lt;/strong&gt; (West African Development Bank bonds)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PALMCI&lt;/strong&gt; (palm oil) — Côte d'Ivoire&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The BRVM has been operating since 1998, which means there's over &lt;strong&gt;25 years of price history&lt;/strong&gt; sitting behind a website with no API — until now.&lt;/p&gt;




&lt;h2&gt;
  
  
  What the API Covers
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://apify.com" rel="noopener noreferrer"&gt;BRVM Market Data API&lt;/a&gt; provides five data modes in a single actor:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Delayed Quotes
&lt;/h3&gt;

&lt;p&gt;Current prices for all ~47 listed equities, updated with a 15-minute delay during trading hours (Mon–Fri, 09:00–15:00 GMT). Each record includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Last price, previous close, change %&lt;/li&gt;
&lt;li&gt;Volume and turnover in XOF&lt;/li&gt;
&lt;li&gt;Ticker, ISIN, company name, country, sector&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Market Indices
&lt;/h3&gt;

&lt;p&gt;All BRVM indices in one call: &lt;strong&gt;BRVM Composite&lt;/strong&gt;, &lt;strong&gt;BRVM 30&lt;/strong&gt;, &lt;strong&gt;BRVM Prestige&lt;/strong&gt;, and available sector indices. Essential for anyone tracking the market at a macro level.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Historical OHLCV Data
&lt;/h3&gt;

&lt;p&gt;Daily open/high/low/close/volume going back over 25 years for any listed equity. This is the dataset that simply didn't exist anywhere in a clean, structured format before.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Company Fundamentals
&lt;/h3&gt;

&lt;p&gt;ISIN, sector, country, market cap, shares outstanding, and listing details for every company on the exchange.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Issuer Announcements
&lt;/h3&gt;

&lt;p&gt;Structured access to BRVM issuer announcements — earnings releases, dividend notices, governance updates — with title, date, and direct link.&lt;/p&gt;




&lt;h2&gt;
  
  
  Who Is This For?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Fintech developers building for the African diaspora
&lt;/h3&gt;

&lt;p&gt;There are an estimated 3 million West Africans living in Europe and North America with money to invest in their home markets. Apps like diaspora investing platforms, remittance tools with investment features, or portfolio trackers for dual-market investors all need this data — and until now had no clean way to get it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Typical usage:&lt;/strong&gt; Poll the quotes endpoint 2–4 times per day during trading hours. Feed results into a dashboard or push notifications for price alerts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Quantitative researchers
&lt;/h3&gt;

&lt;p&gt;West African equity markets are significantly under-researched in academic finance. Correlation with global markets, currency effects on XOF-denominated returns, sector rotation patterns — none of this has been properly studied because the data wasn't accessible. 25 years of daily OHLCV for 47 tickers is a meaningful dataset for any researcher studying frontier markets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Typical usage:&lt;/strong&gt; One-time historical backfill per ticker, then daily updates. A full 25-year history for all 47 tickers is roughly 430,000 rows.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI agents and automated pipelines
&lt;/h3&gt;

&lt;p&gt;Financial research agents, LLM-powered market summary tools, and automated reporting pipelines increasingly need structured data from non-standard markets. The BRVM API is compatible with any system that can call an HTTP endpoint and parse JSON — including AI frameworks like LangChain, n8n workflows, and Make automations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Typical usage:&lt;/strong&gt; Scheduled actor runs feeding a vector database or generating daily market briefings.&lt;/p&gt;

&lt;h3&gt;
  
  
  African capital market analysts
&lt;/h3&gt;

&lt;p&gt;Investment banks, pension funds, and development finance institutions operating in WAEMU (AfDB, IFC, Proparco) produce research on West African equities. Their analysts currently pull data manually from the BRVM website. Structured API access saves hours per report.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Note on Data Freshness
&lt;/h2&gt;

&lt;p&gt;To be transparent: this is &lt;strong&gt;not a real-time feed&lt;/strong&gt;. Data is delayed by approximately 15 minutes during trading hours, sourced from public pages on brvm.org. End-of-day snapshots are the most reliable and most commonly used data point.&lt;/p&gt;

&lt;p&gt;If you need tick-level or sub-second data, you need a licensed direct feed from the exchange — which exists but costs significantly more and requires a commercial agreement. For the vast majority of use cases (dashboards, research, AI pipelines, alerts), 15-minute delayed data is entirely sufficient.&lt;/p&gt;




&lt;h2&gt;
  
  
  How to Use It
&lt;/h2&gt;

&lt;p&gt;The API is available on Apify Store. You can call it via:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JavaScript:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ApifyClient&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;apify-client&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;ApifyClient&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;token&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YOUR_TOKEN&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;run&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;actor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YOUR_ACTOR_ID&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;quotes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;items&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;defaultDatasetId&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;listItems&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Python:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;apify_client&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ApifyClient&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ApifyClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_TOKEN&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;actor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_ACTOR_ID&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run_input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mode&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;quotes&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;defaultDatasetId&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;iterate_items&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;curl:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s2"&gt;"https://api.apify.com/v2/acts/YOUR_ACTOR_ID/runs?token=YOUR_TOKEN"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"mode": "quotes"}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Pricing
&lt;/h2&gt;

&lt;p&gt;The API uses pay-per-event pricing on Apify:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What you get&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Full market snapshot (all ~47 quotes)&lt;/td&gt;
&lt;td&gt;$0.25 per run&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Single ticker quote (filtered)&lt;/td&gt;
&lt;td&gt;$0.05 per ticker&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;All indices&lt;/td&gt;
&lt;td&gt;$0.10 per run&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Historical OHLCV row&lt;/td&gt;
&lt;td&gt;$0.01 per row&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Company fundamentals&lt;/td&gt;
&lt;td&gt;$0.10 per company&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Announcement&lt;/td&gt;
&lt;td&gt;$0.01 each&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A dashboard polling the full market 4× per day costs roughly &lt;strong&gt;$22/month&lt;/strong&gt;. A one-time full historical backfill for a single ticker (25 years ≈ 6,500 rows) costs &lt;strong&gt;$65&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;There's a free discovery tier for first-time users.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Didn't Exist Before
&lt;/h2&gt;

&lt;p&gt;The honest answer: the BRVM serves a relatively small listed universe across markets that global data vendors consider low-priority. Bloomberg, Refinitiv, and FactSet focus their engineering on exchanges with thousands of listed companies and millions of daily trades. The BRVM's 47 stocks and modest liquidity fall below their threshold for dedicated coverage.&lt;/p&gt;

&lt;p&gt;That leaves a gap that's disproportionately painful for the people who actually need the data — African fintech developers, diaspora investors, frontier market researchers — none of whom have the budget for a Bloomberg terminal anyway.&lt;/p&gt;




&lt;h2&gt;
  
  
  Get Started
&lt;/h2&gt;

&lt;p&gt;→ &lt;a href="https://apify.com/malmon/brvm-market-data" rel="noopener noreferrer"&gt;BRVM Market Data API on Apify Store&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;Service temporarily unavailable&lt;/strong&gt; — a data-redistribution license is being arranged with the BRVM. Access will be restored soon.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Data is sourced from public pages on brvm.org. All prices are in XOF (West African CFA franc). This API is not affiliated with or endorsed by the BRVM. Data is provided for informational purposes and is not suitable for automated trading decisions.&lt;/p&gt;

</description>
      <category>api</category>
      <category>data</category>
      <category>news</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
