An AI application that answers questions about companies is only as useful as its sources: the person asking needs the date of the signal and a link or filing behind it. This guide shows how to ground a Microsoft Azure AI application on Fokals company signals so that every answer carries both. It compares two routes, a search index and a SQL tool, and gives the tables, the index fields, the tool definition and the citation rules for each.
Fokals is delivered direct, by REST API and as bulk files in JSON, JSON Lines or CSV, which you load into your own index or database with the platform's own loaders, for example as in bringing external company data into Microsoft Fabric, and the application reads them from there.
The names Microsoft uses today
Microsoft's product names have moved, and older articles use the old ones. Its page What is Microsoft Foundry? lists the change: Azure AI Studio and Azure AI Foundry are now Microsoft Foundry, and Azure AI Services are now Foundry Tools. Agents run in Foundry Agent Service, which Microsoft describes as a managed platform for building, deploying and scaling agents. Retrieval comes from Azure AI Search. Microsoft also offers Foundry IQ, a managed knowledge layer built on Azure AI Search that organises content into knowledge bases for agents. This guide uses those names as they stand on 4 October 2026.
What an answer can cite
Every Fokals record carries the time it was observed, so its provenance travels with it and a citation can be built from the row. The data dictionary defines the tables below.
| Dataset | Columns to cite | What a citation says |
|---|---|---|
Company News (company_news), from the announcements dataset | at, title, url, accession, event_types | The company published this on this date, at this address |
Intent Scores (company_intent_weekly), from the intent dataset | topic, score, evidence | A score for a topic and the five strongest signals behind it |
Company Signals (company_signals) | observed_at, source, kind, detail | A dated action by the company, with its kind, source and detail |
Technology Changes (company_tech_events) | observed_at, technology_name, change, before, after | A tool was added, removed or changed, observed at this time |
The data is company-level throughout: a leadership change is recorded by role, so an answer states the role concerned and cites the announcement.
Two routes
| Search index | SQL tool | |
|---|---|---|
| Holds | One document for each fact, with its text, date and address | Fokals datasets in your own database |
| Suits | Announcements, filings and evidence sentences | Counts, trends, comparisons and joins |
| Microsoft component | The Azure AI Search tool, or a Foundry IQ knowledge base | A function tool whose code runs your query, or an MCP server |
| Citations come from | The index fields for address and title | Fields your function returns |
| Limit to know | The tool reads one index | Runs expire after 10 minutes |
Choose by the question. A question about what Acme Robotics has announced since 1 September is retrieval: find documents and quote them. A question about whether it has added sales roles in the last six weeks is arithmetic, and a model should not add figures it has read in a paragraph. Run that query in SQL and let the model describe the result. Acme Robotics is an illustrative company.
Route A: a search index
Azure AI Search takes JSON documents that you push, up to 1,000 documents or 16 MB in a batch, or pulls them with indexers from supported stores, OneLake files among them. Build one document for each Company News row and compose the text from fields the row already holds. This example is illustrative:
{
"id": "acme-robotics-news-0001",
"company_id": "<company_id>",
"company": "Acme Robotics",
"at": "2026-09-22T00:00:00Z",
"event_types": ["product_launch"],
"source": "page",
"title": "Acme Robotics announces a new warehouse robot",
"url": "https://example.com/acme-robotics/news/new-warehouse-robot",
"content": "The company's own text of the announcement, taken from the excerpt column."
}Make company_id, at and event_types filterable, and keep title and url retrievable. The page for the Azure AI Search tool lists, among its index requirements, a retrievable field with a source address and optionally a title, so that citations carry a link. It also lists a vector field, so the tool expects an index set up for vector search, and it can target only one index. Put several Fokals datasets into that one index with a kind field, or use a Foundry IQ knowledge base, which can hold several knowledge sources.
A filter is an OData expression, and Microsoft's filter reference writes date literals without quotes:
company_id eq '<company_id>' and at ge 2026-09-01T00:00:00ZThe tool's filter setting applies to every query the agent makes to the index, so use it for a fixed scope such as a date floor. For a filter that follows each question, call the search API from a function.
Route B: a SQL tool
Foundry Agent Service supports function calling. You describe a function by name, parameters and purpose, the model asks your application to call it, and your code runs it and returns the output. Microsoft's function calling page says runs expire 10 minutes after creation and tells you to treat arguments and outputs as untrusted input and to validate them. For company signals that means a few named functions, each with one fixed, parameterised query that you have tested, and no function that runs SQL the model wrote.
{
"type": "function",
"name": "sales_hiring_trend",
"description": "Open, new and closed sales postings for each closed week, for one company.",
"parameters": {
"type": "object",
"properties": {
"company_id": { "type": "string", "description": "The Fokals company_id" },
"weeks": { "type": "integer", "description": "Closed weeks to return, 1 to 26" }
},
"required": ["company_id", "weeks"],
"additionalProperties": false
}
}SELECT TOP (@weeks) week_start, open_sales, new_sales, closed_sales
FROM company_sales_weekly
WHERE company_id = @company_id
ORDER BY week_start DESC;Check the arguments in code before the query runs: that the company exists and that weeks lies between 1 and 26. Return the rows with the table name and week_start, so the answer can say where each figure came from. A week has a row only after it closes, so the instructions should have the model say the last closed week and not this week.
Microsoft's alternative is the Fabric data agent tool. Its page describes it as turning Fabric data into question and answer and running queries under the end user's identity. It needs a paid Fabric capacity of F2 or larger, or Power BI Premium P1 or larger with Fabric enabled, and the tool's API type carries the word preview. A function runs the one query you tested, while a data agent generates queries from the question, so choose by whether you need a fixed report or open exploration. A third way to expose the same query is an MCP server, which Foundry also connects to agents. Serving company data to AI agents over Model Context Protocol covers it.
Citations from the evidence
Build citations from fields, not from the model's memory. For an intent score, return the row's evidence, which holds the five strongest signals as date, kind, source, weight and detail, and have the answer list them. For an announcement, return url and at, and for a regulatory disclosure the accession too. With the Azure AI Search tool, citations arrive as URL citation annotations built from the index, and Microsoft's page says the agent instructions need to ask for them. Four rules keep them honest:
- Return the source fields with every figure or fact, and instruct the model to cite only what a tool returned in the same turn.
- Check the answer afterwards. Every
urloraccessionin it must appear in the rows returned for that turn, or the citation is dropped. - State the date, and read events for what they are. The first observation of a website or job board sets a baseline and counts as no change, so an event row exists only for a change seen to happen.
- Present scores with their evidence. Every intent score carries the dated signals behind it, so the instructions should have the model list those signals beside the score.
Regions and licence
Agentic retrieval is available in select regions, and parts of it, such as LLM query planning, are in preview, according to Microsoft's agentic retrieval page, while its introduction to Azure AI Search lists no region restriction for classic search.
Who uses the application also decides the licence form. Fokals licenses by written agreement for internal use, embedding in a product or redistribution: whether the assistant serves your own staff or is part of a product your customers use decides which of these applies. Settle it in the agreement before launch. Company data as context for AI agents and retrieval over structured company signals treat the design questions that apply on any platform.
Frequently asked questions
What does grounding an AI application on company data mean?
Grounding means the application builds its answers from data you supply at the time of the question, not from what the model learned in training. For company signals the supplied data is rows and announcements with dates and sources, and a grounded answer shows them: the date of each signal and the link or filing behind it.
Should I use Azure AI Search or a SQL tool for company signals?
Use both, for different questions. Azure AI Search suits announcements and filings, where the task is to find and quote documents. A SQL tool suits counts, trends and comparisons, where arithmetic belongs in a query and not in the model. Many applications register one search tool and a few named functions, and let the model choose for each question.
How do I get citations from Fokals evidence?
Return the source fields with every figure: url and at for an announcement, accession for a regulatory disclosure and the evidence array for an intent score. Ask for citations in the agent instructions, then check that every address or accession in the answer was returned by a tool in that turn. With the Azure AI Search tool, citations arrive as URL citation annotations.
How does Fokals data reach a Microsoft Foundry agent?
Fokals is delivered direct, by REST API and as bulk files in JSON, JSON Lines or CSV. You load the rows into your own index or database with the platform's own loaders, and the agent reads them from there through a search tool, a function or an MCP server.
Can a Foundry agent query a Fabric lakehouse directly?
Through the Fabric data agent tool, yes, with conditions. Microsoft's page says the tool runs queries under the end user's identity, needs a published Fabric data agent and a paid capacity, and does not support service principals. A function that runs your own tested query against the lakehouse's SQL endpoint is the alternative when the report must not vary.
The queries and code on this page are examples to adapt. Test them in your own environment before you rely on them.
What this page says about the products it names was checked against their public documentation on 4 October 2026. Product and company names are trademarks of their owners. Fokals is not affiliated with them or endorsed by them.