← All migration guides

Migrate from Canny to Fizlog

If you use Canny mostly for its changelog, moving it to Fizlog is one command: the importer pulls every published entry from Canny's API, with its Markdown, type and original date.

About 30 minutes · keeps your entries and their original dates · no credit card

Why teams switch from Canny

Full side-by-side: Fizlog vs Canny.

Step by step

1

Create your Fizlog project

Sign up (free for one project), create a project and open it. You need two values from the project page: the public key used in the embed snippet and the API key under "API access".

2

Get your changelog out of Canny

Canny's API lists every changelog entry with its Markdown content, publish date and types (new / improved / fixed — the same three types Fizlog uses). Copy your secret API key from Canny's API & Webhooks settings page. The importer pages through all entries and skips drafts.

php fizlog-import.php canny YOUR_CANNY_API_KEY

Only the changelog moves. Feedback posts, votes and roadmap items stay in Canny — Fizlog has no boards or voting.

3

Preview, then import

Run the importer with --dry-run first to see every entry it found, then run it again without the flag. Entries keep their original dates and are imported silently, so no webhook or subscriber email fires for old posts.

The importer is a single PHP file with no dependencies — download fizlog-import.php or read it on the guides page.

export FIZLOG_API_KEY=your_project_api_key php fizlog-import.php canny YOUR_CANNY_API_KEY --dry-run php fizlog-import.php canny YOUR_CANNY_API_KEY
4

Swap the embed snippet

Replace the Canny widget code in your app with the Fizlog script tag. Without data-selector the widget shows as a small button in the corner; with it, the bell renders inside an element you choose.

BEFORE — Canny changelog widget
<!-- Canny SDK loader (sdk.canny.io/sdk.js) --> <script>!function(w,d,i,s){ /* ... */ }(window,document,"canny-jssdk","script");</script> <script> Canny('initChangelog', { appID: 'YOUR_APP_ID', position: 'bottom', align: 'left' }); </script> <button data-canny-changelog>What's new</button>
AFTER — Fizlog
<script src="https://fizlog.com/widget/widget.js" data-project="YOUR_PUBLIC_KEY" data-selector="#whats-new" async></script>
5

Point old links at your new changelog

Canny's changelog lives on your Canny subdomain (or custom domain). Redirect that link to your Fizlog public page (fizlog.com/p.php?key=YOUR_PUBLIC_KEY — Fizlog doesn't host custom domains) and update links in your app. If you keep Canny for feedback, just remove its changelog link.

6

Check, then cancel Canny

Open your app and the public page, confirm the entries look right, and only then cancel your Canny subscription.

FAQ

Do Canny types carry over?

Yes. Canny and Fizlog both use New, Improved and Fixed; the importer uses the first type of each entry.

Is Markdown preserved?

Mostly. The importer sends Canny's Markdown as-is; Fizlog renders bold, italics, links, code and lists. Images and embeds are not shown.

Will my users be notified again?

No. Imported entries are silent — no webhook, no subscriber email.

Can I keep Canny for feedback and use Fizlog for the changelog?

Yes. The two widgets use different elements; just remove data-canny-changelog from your button and add the Fizlog script.

Export options per Canny's own documentation, checked September 2026: Canny API — list entries, Canny changelog widget. Vendors change their products — if a step no longer matches, check your plan's export options.

Ready to move?

Free for one project, $0.99/mo flat for unlimited.

Start free on Fizlog — no credit card