The header of the dashboard carries Add account, which opens the
list of social media to link one, and Add Post, which opens a new
post, next to the Update button.
The dashboard lists the publications that exist on the social media,
together with their statistics. A scheduled publication is not online
yet and a failed one never got there, so neither of them is listed:
they are followed from the Posts menu, on the post they belong to,
and the scheduled ones also in the calendar.
Posts that contain a video display a video indicator on their card,
and the posts kanban shows a Video (N) counter.
Opening a single publication shows it read-only, with its account, its
state, its message, its images, its videos and its statistics. A
publication mirrors the social media, so nothing is written from
there. The Open publication button opens it on the social media, and
is only shown for a publication that got there: one that was never
published, or whose publication was deleted, has no address. The
address survives a deletion made on the social media, so the button
asks before opening anything: one call, for the one publication being
opened. The card of the dashboard asks the same way.
A publication carries the very images and videos of its post. The post
hands them over when it is sent, so a card shows them as soon as the
publication exists — one that failed shows them just like one that
went through — and a picture sent to several accounts is stored once,
not once per account.
A publication imported from the social media is the only one that
keeps medias of its own, because it has no post to share them with. It
only carries the flag saying it has a video, never the file: the video
is watched on the social media.
Posts deleted directly on the social media are marked as Deleted on
<media> and kept in the dashboard as history. Opening one is what
notices it here. Finding out on its own, without anybody opening
anything, means reading the whole feed: that pass comes with Social
Media Sync.
Commenting a publication, answering a comment and Recommend are read
from and written to the social media, so they come with Social Media
Sync. Without that module the card shows neither the counters nor the
entries: the footer of a card in this module carries only the campaign
badge. Both the like and comment counters and the entries that write
them come with that module, and only for a social media whose bridge
serves them.
Deleting a post deletes the publications it created. A post whose
publications are still online cannot be deleted: remove them from the
dashboard first, which deletes them on the social media as well, or
archive the post to keep its history.
Deleting a publication from the dashboard deletes it on the social
media and in Odoo, and if it was the only publication of its post, the
post is deleted too. To keep the history, archive the post instead of
deleting its publications.
The figures of an account card — impressions, interactions, engagement
— are added up when the dashboard opens, from the daily series of the
account when it has one and from the counters of its publications
otherwise. It asks the social media for nothing, so opening the
dashboard is free however many publications the account has.
The engagement of a card is derived from those totals: the
interactions of the account over its impressions, shown as a
percentage. It is not the average of the rates of the days or of the
publications, which would give a day with three impressions the same
weight as a day with thirty thousand. What counts as an interaction is
what the social media counts: X adds its retweets and quotes to the
clicks, likes, comments and shares.
Of the counters of a publication, the tracked clicks are the ones
Odoo counts by itself: they are the clicks of the link tracker. The
figures the social media reports — impressions, clicks, likes,
comments, shares, engagement — are read back from it for the
publications of the last 30 days, as described in Figures of a
publication below, and shown in the Statistics dialog of the card.
The list, the search filters and the form of a publication draw them
only with Social Media Sync installed, because those views span the
whole history.
An account whose social media reports no daily figures shows on its
card the totals of the publications inside that window, which is as
much as can be known about it without importing its history.


Social Media Base
This module provides the fundamental foundation for social media management. It facilitates the integration of user accounts, posts and native graph and pivot analysis over a daily time series. Designed to be flexible and scalable, it allows developers and businesses to integrate and customize social features according to their needs.
What it asks of a social media is always a fixed number of calls per account: publishing, deleting, and the daily series of the page. Reading back what an account already published — the publications themselves and their comments — costs one call per page, so it grows with the history of the account and lives in Social Media Sync instead. The figures of a publication are read back here, but only for the ones published in the last 30 days: what that window costs is decided by the days it looks back and not by the history of the account. Without Social Media Sync the dashboard still works: the figures of a card are added up from what is already stored, and the Statistics dialog of a publication shows both the clicks Odoo counted on its own tracked link and the figures the social media reported for it, read back over the last 30 days. The list, the search filters and the form of a publication draw those figures only with Social Media Sync installed, because they span the whole history of the account.
This module does not connect to any social media by itself: it brings the models, the security, the scheduled actions and the common interface. To use it, a connector module has to be installed as well (for instance Social Media Linkedin or Social Media X), which is what registers the social media, implements the OAuth authorization and publishes for real.
Main features:
Table of contents
Installation
This module is not compatible with the Social Marketing module (social) of Odoo Enterprise: both declare the social.media, social.account and social.post models, so they cannot live in the same database.
The manifest states it with "excludes": ["social"], so Odoo refuses the installation with an error when the other module is already installed, and the other way round. The whole Social Media family is affected, since every module of it depends on this one.
Configuration
Tracked links
Usage
Posts on the dashboard.
The header of the dashboard carries Add account, which opens the list of social media to link one, and Add Post, which opens a new post, next to the Update button.
The dashboard lists the publications that exist on the social media, together with their statistics. A scheduled publication is not online yet and a failed one never got there, so neither of them is listed: they are followed from the Posts menu, on the post they belong to, and the scheduled ones also in the calendar.
Posts that contain a video display a video indicator on their card, and the posts kanban shows a Video (N) counter.
Opening a single publication shows it read-only, with its account, its state, its message, its images, its videos and its statistics. A publication mirrors the social media, so nothing is written from there. The Open publication button opens it on the social media, and is only shown for a publication that got there: one that was never published, or whose publication was deleted, has no address. The address survives a deletion made on the social media, so the button asks before opening anything: one call, for the one publication being opened. The card of the dashboard asks the same way.
A publication carries the very images and videos of its post. The post hands them over when it is sent, so a card shows them as soon as the publication exists — one that failed shows them just like one that went through — and a picture sent to several accounts is stored once, not once per account.
A publication imported from the social media is the only one that keeps medias of its own, because it has no post to share them with. It only carries the flag saying it has a video, never the file: the video is watched on the social media.
Posts deleted directly on the social media are marked as Deleted on <media> and kept in the dashboard as history. Opening one is what notices it here. Finding out on its own, without anybody opening anything, means reading the whole feed: that pass comes with Social Media Sync.
Commenting a publication, answering a comment and Recommend are read from and written to the social media, so they come with Social Media Sync. Without that module the card shows neither the counters nor the entries: the footer of a card in this module carries only the campaign badge. Both the like and comment counters and the entries that write them come with that module, and only for a social media whose bridge serves them.
Deleting a post deletes the publications it created. A post whose publications are still online cannot be deleted: remove them from the dashboard first, which deletes them on the social media as well, or archive the post to keep its history.
Deleting a publication from the dashboard deletes it on the social media and in Odoo, and if it was the only publication of its post, the post is deleted too. To keep the history, archive the post instead of deleting its publications.
The figures of an account card — impressions, interactions, engagement — are added up when the dashboard opens, from the daily series of the account when it has one and from the counters of its publications otherwise. It asks the social media for nothing, so opening the dashboard is free however many publications the account has.
The engagement of a card is derived from those totals: the interactions of the account over its impressions, shown as a percentage. It is not the average of the rates of the days or of the publications, which would give a day with three impressions the same weight as a day with thirty thousand. What counts as an interaction is what the social media counts: X adds its retweets and quotes to the clicks, likes, comments and shares.
Of the counters of a publication, the tracked clicks are the ones Odoo counts by itself: they are the clicks of the link tracker. The figures the social media reports — impressions, clicks, likes, comments, shares, engagement — are read back from it for the publications of the last 30 days, as described in Figures of a publication below, and shown in the Statistics dialog of the card. The list, the search filters and the form of a publication draw them only with Social Media Sync installed, because those views span the whole history.
An account whose social media reports no daily figures shows on its card the totals of the publications inside that window, which is as much as can be known about it without importing its history.
Statistics.
Go to Social Media > Statistics
The view is a standard Odoo graph over the daily statistics of the accounts: one row per account and day, so the search panel, the group by, the comparison against the previous period or year, the favourites and the export all work as they do anywhere else in Odoo.
The line drawn is the impressions, with one series per account. A graph draws one measure at a time, so picking Likes, Comments, Shares, Clicks or Engagement in the measure selector replaces it. The pivot view, the second one of the same action, shows the six of them together.
The interval of the axis is the day. It is changed from Group By > Date, which offers year, quarter, month, week and day. Beware that activating a group by from the search panel replaces the one the view opens with, so switching the date to months also drops the account series: add Accounts back in the same menu to get them again.
The counters are added up when several days are grouped together. The engagement is averaged instead, because it is a ratio the social media reports and adding ratios up means nothing.
That average counts the days with no activity as a zero, so the wider the interval the lower it reads: a year with a handful of busy days shows an engagement close to zero even though the busy days themselves were far above it. It is the rate of the period, not the rate of the publications. Group the pivot by day to read it undiluted.
The days a social media reported nothing for are drawn as a zero by Odoo, which is indistinguishable from a day with no activity.
Only the social media reporting figures by day have a history to draw. The ones that only publish lifetime counters keep their figures on the card of the dashboard and draw nothing here, so an account of theirs shows the standard empty view. Each connector module documents which case it is.
Archive an account.
The account is archived from the Archive entry of the Actions menu of the account form, available to the user responsible for the account.
Archiving an account also archives its dashboard publications and the posts left without any active account. A post that still targets an active account stays visible, and it is archived as soon as its last account is.
Archiving a post archives its publications too. Archived posts are found in the Posts menu with the Archived filter, and their form shows an Archived ribbon and an Unarchive button.
Nothing is removed from the social media. The archived account shows an Archived ribbon, and the Unarchive entry of its Actions menu restores everything.
A scheduled post whose date passed while the account was archived comes back as Draft, with the reason in its chatter: unarchiving never hands it to the scheduled action to be published on the spot. Reschedule it to publish it.
Delete an account permanently.
Scheduled publishing.
What the social media will refuse.
Marketing campaigns.
Campaign badge.
Follow the posts from the marketing campaign.
The Social Media tab and the Posts stat button of the campaign form belong to the Odoo marketing campaign (utm.campaign), the one shared with the mailings, the leads and the UTM tracking.
Tracked links.
Partial failures.
Expired credentials.
Statistics of the accounts.
Figures of a publication.
Account ownership.
Notifications you may never see.
Known issues / Roadmap
Multi-company scope of the posts.
The accounts (social.account) and their daily statistics (social.account.statistics) are the multi-company records: they carry a company and a record rule that filters them. The posts and their publications have neither a company field nor an equivalent rule, so they are only filtered by their responsible user. In a multi-company database a social media administrator therefore sees the posts of every company.
Figures older than the window
The daily refresh reads back the publications of the last 30 days, which is what keeps its cost independent of the history of the account. A publication that was already older than that when the module was installed therefore stays at zero for good: nothing brings it inside the window again. It is accurate — nobody ever asked the social media about it — but on a card it reads like a figure that failed to arrive, and there is no way from here to tell the two apart. Reading the history of an account is what Social Media Sync is for.
The figures of those views are added by that module for the same reason: the list, the search filters and the form of a publication span the whole history, where a figure inside the window sits next to one that was never read. The Statistics dialog of a card does not, and it draws them all.
Storage of the medias of a post
The images and videos of a post and of its publications are ordinary ir.attachment records, kept for as long as the record that owns them. A post published on several accounts stores each media once, because every publication points at the attachments of the post instead of copying them, and what each social media made of that media is a reference in media_refs.
What ages a media out lives in Social Media Sync, which is where the cost grows with the history of an account: it downloads a media of its own for every publication it imports, and a maximum age in days releases them. The medias of a post are out of that reach on purpose, being editorial content that a post stores once however many accounts it went to.
Inside this module the deletions are the cascade that takes the medias of a post or of a publication when the record itself is deleted, the vacuum that deletes a day later the medias a post let go of, and social.account.action_purge_account, which drops an account with its publication history. Moving those bytes out of the filestore is not something this module decides either: an external backend is configured at the level of Odoo, through ir_attachment.location, and applies to every attachment of the database.
Bug Tracker
Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed feedback.
Do not contact contributors directly about support or help with technical issues.
Credits
Authors
Contributors
Maintainers
This module is maintained by the OCA.
OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use.
Current maintainer:
This module is part of the OCA/social project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.