Falcon Data Hub
← Blog

Consultar ações e FIIs da B3 em PHP: cotação, histórico e projeção

Busque a cotação de qualquer ação ou fundo imobiliário da B3 (PETR4, CPTS11, HFOF11…), recupere o histórico diário e monte uma projeção de preço — tudo em PHP com a SDK do Falcon Data Hub.

Mostrar a cotação de uma ação na tela é fácil quando o ativo é a PETR4 da vida. O problema aparece quando o usuário digita CPTS11, HFOF11 ou IRIM11 — os fundos imobiliários (FIIs) que muita gente carrega na carteira e que a maioria das APIs gratuitas internacionais simplesmente não cobre.

Este guia mostra como consultar qualquer ativo da B3 — ações e FIIs — em PHP, recuperar a série histórica de preços e montar uma projeção simples, usando a SDK do Falcon Data Hub.

Por que isso costuma dar trabalho

APIs como a Alpha Vantage cobrem bem ações americanas e até as grandes da B3 com sufixo .SA, mas a cobertura de FIIs brasileiros é fraca ou inexistente. Resultado: o PETR4 funciona, mas o CPTS11 volta vazio — e seu usuário fica sem dado justamente no ativo que ele acompanha todo dia.

O Falcon Data Hub resolve isso por baixo dos panos: quando a fonte primária não cobre o ativo, ele cai para uma fonte que enxerga ações e FIIs da B3. Para quem consome a API, é uma chamada só — o fallback é transparente.

Setup

composer require quantumtecnology/falcon-datahub-sdk

Configure o token uma vez (no boot da aplicação ou num service provider):

use QuantumTecnology\FalconDataHub\Falcon;
use QuantumTecnology\FalconDataHub\FalconConfig;

Falcon::configure(new FalconConfig(
    token: env('FALCON_TOKEN'),
));

Consulta básica

$result = Falcon::action()->search('CPTS11');

// $result->success  // bool
// $result->message  // string
// $result->data     // array com symbol, time_series, variations, predictions, analysis

if (! $result->success) {
    throw new RuntimeException($result->message);
}

$data = $result->data;

O mesmo código funciona para ação (PETR4) ou FII (CPTS11) — você não precisa saber de antemão o tipo do ativo.

O que vem na resposta

$data['symbol'];       // "CPTS11"
$data['time_series'];  // histórico diário: [{ date, data: { open, high, low, close, volume } }, ...]
$data['variations'];   // variação % de um dia para o outro: { "2026-05-29": 0.39, ... }
$data['analysis'];     // análise pronta: variação diária + projeção de preço

O bloco analysis é o atalho: ele já entrega a variação diária e uma projeção de preço dos próximos dias úteis, calculada por regressão linear sobre o fechamento — sem você precisar treinar nada.

Cotação atual e variação do dia

function cotacaoAtual(array $data): array
{
    // time_series vem ordenado do mais recente para o mais antigo
    $ultimo = $data['time_series'][0]['data'] ?? null;

    if (! $ultimo) {
        throw new RuntimeException('Sem histórico para este ativo.');
    }

    return [
        'symbol'     => $data['symbol'],
        'preco'      => (float) $ultimo['close'],
        'abertura'   => (float) $ultimo['open'],
        'maxima'     => (float) $ultimo['high'],
        'minima'     => (float) $ultimo['low'],
    ];
}

$cotacao = cotacaoAtual($result->data);
// ['symbol' => 'CPTS11', 'preco' => 7.64, 'abertura' => 7.64, ...]

Projeção de preço pronta

Em vez de implementar a regressão na mão, use o analysis->projection que a API já devolve:

$projecao = $data['analysis']['projection'] ?? null;

if ($projecao) {
    echo "Último fechamento: R$ {$projecao['last_close']}\n";
    echo "Tendência: R$ {$projecao['slope_per_day']}/dia\n";

    foreach ($projecao['forecast'] as $dia) {
        echo "{$dia['date']}: R$ {$dia['price']}\n";
    }
}

A saída é a projeção dos próximos dias úteis na mesma escala do preço — pronta para virar a linha tracejada de um gráfico no seu front.

> A projeção é uma estimativa estatística simples (regressão linear sobre o fechamento), útil para indicar tendência. Não é recomendação de investimento.

Montando um payload pronto para o front

Juntando tudo numa função que sua API interna pode expor:

function resumoAtivo(string $simbolo): array
{
    $result = Falcon::action()->search($simbolo);

    if (! $result->success) {
        throw new RuntimeException($result->message);
    }

    $data    = $result->data;
    $serie   = collect($data['time_series'] ?? []);
    $ultimo  = $serie->first()['data'] ?? [];

    return [
        'symbol'     => $data['symbol'],
        'preco'      => (float) ($ultimo['close'] ?? 0),
        'historico'  => $serie
            ->map(fn ($p) => [
                'date'  => $p['date'],
                'close' => (float) ($p['data']['close'] ?? 0),
            ])
            ->values()
            ->all(),
        'projecao'   => $data['analysis']['projection']['forecast'] ?? [],
    ];
}

Com isso o front recebe preço atual, histórico para o gráfico e projeção — tudo de uma chamada.

Limites a considerar

  • Fonte com cota: a fonte primária de cotações tem limite diário no plano gratuito. O Falcon Data Hub controla esse orçamento e usa fallback, mas em rajadas de consultas a símbolos novos vale espaçar as chamadas.
  • Cache: cotação diária muda uma vez por dia. Cachear o resultado por algumas horas (Redis, ou o cache do Laravel) economiza requisições e deixa sua tela instantânea.
  • Ativos novos: a primeira consulta a um símbolo inédito popula o histórico e pode demorar um pouco mais; as próximas vêm do cache do Data Hub.
use Illuminate\Support\Facades\Cache;

$resumo = Cache::remember("ativo:{$simbolo}", now()->addHours(6),
    fn () => resumoAtivo($simbolo)
);

Conclusão

Consultar a B3 em PHP não precisa de uma conta de corretora nem de raspar site na unha. Com uma chamada — Falcon::action()->search() — você cobre ações e FIIs, recebe o histórico pronto para o gráfico e ainda ganha a projeção de preço de brinde. Adicione um cache de algumas horas e você tem um widget de cotações estável para o seu produto.

Gostou do artigo?

Comece a usar a API do Falcon Data Hub agora. Plano grátis, sem cartão.

Criar conta grátis
API de ações e FIIs da B3 em PHP — cotação e projeção | Falcon Data Hub