How to get there: Go to your ProductLift Changelog to add posts manually, or use the ProductLift API for bulk import.
Beamer is primarily a changelog and announcements tool, not a feedback board. So this migration is mostly Beamer Posts → ProductLift Changelog entries, not feedback posts. If you also use Beamer's Feature Requests / Roadmap product, the feedback side imports through ProductLift's standard CSV path.
You'll need:
| Beamer surface | ProductLift destination |
|---|---|
| Posts (changelog announcements) | Changelog entries |
| Reactions (positive/neutral/negative) | Changelog reactions (ProductLift supports emoji reactions on changelog entries, pick the closest mapping) |
| Feature Requests (with upvotes) | Feedback board posts (see main importer flow) |
| Categories | Tags or labels |
| Translations | Multilingual changelog entries (one ProductLift entry per post, with translations stored on the same entry) |
Beamer's admin UI doesn't expose a "Download CSV" button for posts. The practical path is the API.
GET /posts, paginated list of changelog postsGET /posts/{postId}, single postGET /posts/{postId}/comments, comments on a postGET /posts/{postId}/reactions, reaction breakdownBeamer-Api-Key: YOUR_KEY.Each post returns: id, date, category, translations[] (title, content, contentHtml, language, images), pinned, published, views, feedbacks, positiveReactions, neutralReactions, negativeReactions.
ProductLift changelog entries support multiple language translations on a single entry (same as Beamer). You don't need to split one Beamer post into multiple ProductLift posts. Map translations[] directly: each language Beamer stored becomes one translation on the ProductLift entry.
If you publish in many languages, keep the same language set in ProductLift portal settings before importing so the translations attach cleanly. See the changelog reference.
For each Beamer post, build a row with:
| Beamer field | ProductLift changelog field |
|---|---|
translations[].title |
Title (one per language) |
translations[].contentHtml or content |
Body (HTML or markdown, one per language) |
category |
Tag or category |
date |
Published date |
pinned |
Pinned flag |
positiveReactions / neutralReactions / negativeReactions |
ProductLift changelog reactions (map to emoji counts, see above) |
Skip views and per-link click counts, these don't carry over.
Add them manually:
See Adding posts to the changelog.
Use the ProductLift API to script bulk creation of changelog entries from your Beamer pull. One Beamer post → one ProductLift API create call.
If you also used Beamer's Feature Requests product (with upvotes), export those separately and use the standard ProductLift importer:
date field maps to your changelog timeline.ProductLiftIdentify({ email, uid, name, ... }). See Single sign-on (SSO).Beamer migrations involve translation handling, reaction decisions, and (if applicable) Feature Requests splitting. Send us your Beamer API key and we'll handle the whole pull + import. Email support@productlift.dev to start a migration concierge request.
contentHtml instead of content, Beamer stores rich content there.