Cosmic Insights for Astro

Cosmic Insights ships as a single <script> tag that works in every framework. No npm package, no Astro integration to install. The tracker hooks history.pushState / popstate natively, so View Transitions and SPA navigations are captured automatically.

If your app is built with Cosmic AI Build, the tag is injected for you. The instructions below cover manual installs.

Project id

Find your project id in the dashboard under Project, Settings, Basic settings (the PROJECT ID field has a copy button). It is not a secret.

# .env
PUBLIC_COSMIC_INSIGHTS_PROJECT=your_project_id

Install

Add the script to your base layout's <head>:

---
// src/layouts/Base.astro
const projectId = import.meta.env.PUBLIC_COSMIC_INSIGHTS_PROJECT;
---
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <title>{Astro.props.title}</title>
    <script
      is:inline
      defer
      src="https://insights.cosmicinsights.dev/script.js"
      data-project={projectId}
    />
  </head>
  <body>
    <slot />
  </body>
</html>

is:inline keeps Astro from processing the tag so the defer attribute and the data-project value reach the browser unchanged.

Object attribution

Render a single <meta name="cosmic-context"> tag in the page head with JSON content identifying the Cosmic object. The tracker re-reads it on every SPA navigation.

---
// src/pages/blog/[slug].astro
import Base from '../../layouts/Base.astro';
import { getPost } from '../../lib/cosmic';
const post = await getPost(Astro.params.slug);
const context = JSON.stringify({
  object_id: post.id,
  object_type: post.type_slug,
});
---
<Base title={post.title}>
  <meta name="cosmic-context" content={context} slot="head" />
  <article>{/* ... */}</article>
</Base>

If your layout doesn't expose a head slot, render the <meta> tag inside the layout itself and pass context as a prop.

Custom events

window.cosmicInsights('signup', { plan: 'team' });
window.cosmicInsights('order_paid', { revenue_cents: 4900, currency: 'USD' });

Recognized top-level fields like revenue_cents and object_id are promoted onto the event row; everything else is stored in event_props.

See Attribution for the full precedence model.

FAQ

How much does Cosmic cost?

Project plans are Free ($0), Builder ($99/mo), Team ($299/mo), Business ($499/mo), Enterprise (custom pricing). Yearly billing saves 10%. Workspace plans are Small Workspace ($999/mo) and Large Workspace ($2,999/mo), and they start with a 30-day free trial. Allowances, add-on rates, and the rest of the pricing FAQ are plain text at https://www.cosmicjs.com/pricing.md.

Are API keys required, and is content private?

Each Bucket has a read key and a write key in Bucket Settings > API Access. GET requests use the read key. POST, PATCH, and DELETE use the write key as Authorization: Bearer. Do not put the write key in a browser bundle, a mobile app, or a NEXT_PUBLIC_ variable. SAML single sign-on is on Large Workspace and Enterprise. The audit log is append-only. Text versions: https://www.cosmicjs.com/security.md and https://www.cosmicjs.com/docs/dashboard/audit-log.md.

Can an agent create a Cosmic project without an existing account?

Yes. POST https://dapi.cosmicjs.com/v3/agents/sign-up provisions a free-tier project and bucket tied to a human email, with no existing Cosmic account. The human claims it with the emailed one-time code. The playbook is https://www.cosmicjs.com/docs/ai-onboarding.md.