Blog
How to Embed a Live Chart in Notion, a Blog, or Docs
"Embed a chart" gets used loosely enough that it's worth being precise about what it actually means, because the two common versions behave completely differently once they're live somewhere.
Two things people mean by "embed"
An embedded image. A .png or static export, wrapped in a link or dropped into a page. It looks like a chart. It behaves like a photo of a chart — frozen the moment it was made, unaware that the underlying data has moved on.
An embedded document. A live <iframe> or equivalent, pointing at a page that re-queries or re-renders on load. It looks the same at a glance, but it's showing you the current state of the data, not a snapshot from whenever someone last exported it.
The difference is invisible until the data changes — at which point the first one is quietly wrong and the second one isn't.
<!-- embedded image: correct today, wrong in a month -->
<img src="/exports/q3-revenue.png" alt="Q3 Revenue" />
<!-- embedded document: reflects current data on every load -->
<iframe src="https://[team].infigured.com/p/q3-revenue" />
Where each one is genuinely fine
Static image embeds aren't a mistake in every context. A blog post about a specific historical event — "here's what Q3 2025 looked like" — should probably stay frozen at that point in time; a live embed there would be actively confusing, since the point is what happened then, not what the number is now.
The mistake is defaulting to static embeds for anything meant to represent an ongoing, current state — a KPI reference in an internal wiki, a metric in a recurring status doc, anything living in a Notion page that's supposed to still be accurate next month.
What a live embed actually requires
For an embed to genuinely stay current, three things need to be true: the chart needs to be backed by a query rather than a frozen dataframe, that query needs a defined refresh or cache policy, and the hosting page needs a stable URL that doesn't change every time the chart is updated.
// the embed URL stays constant — what's behind it can change
// independently, based on the document's cache policy
const embedUrl = "https://acme.infigured.com/p/q3-revenue-review";
<!-- drop straight into Notion, a wiki, or a hand-rolled site —
no export step, no re-uploading a new image every week -->
<iframe
src="https://acme.infigured.com/p/q3-revenue-review"
width="100%"
height="480"
frameborder="0"
>
</iframe>
Because a document in Infigured is rendering instructions against a workspace-level query rather than a copy of the data, the embed URL never needs to change when the underlying numbers do — the same link keeps working, and what it shows updates according to whatever cache policy the query uses (snapshot_then_requery by default).
A quick way to check which one you're looking at
If you're not sure whether something you've embedded is live or static, the fastest test is simple: does it change when the source data changes, without you doing anything? If the answer is "only if I re-export and re-upload it," it's an image wearing a chart's name.
Related: Plotly vs. Matplotlib for Dashboards (and What Happens After You Make the Chart)
Continue the workflow
Explore related guides
Next step
Move from insight to a stakeholder-ready story.
Infigure helps teams replace the export-to-slides loop with one connected reporting workflow for analysis, narrative, and delivery.