Link Tracker

link_tracker
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/19.0/link_tracker
VERSION
VERSION 1.1
CATEGORY
CATEGORYMarketing
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo S.A.
MAINTAINERS
MAINTAINERSOdoo S.A.
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Xavier Morel, Julien Castiaux, Xavier-Do, std-odoo, Tiffany Chang (tic), Gorash, William Braeckman, Florian Charlier, alsh-odoo, Victor Piryns (pivi), amdi-odoo, Dylan Kiss (dyki), Louis (loti), reka-odoo, guce, yagp-odoo, Anton Romanova (roan), Krzysztof Magusiak (krma), saurabh, Haroune Hassine (Hahas)
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:51:41
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - utm
    - base
    - web
    - mail
    - base_setup
    - bus
    - web_tour
    - html_editor
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Shorten URLs and use them to track clicks and UTMs

Code Analysis

Views touched (10)
XML IDNameModelTypeStatus
link_tracker_click_view_form link.tracker.click.view.form link.tracker.click form New
link_tracker_click_view_graph link.tracker.click.view.graph link.tracker.click graph New
link_tracker_click_view_search link.tracker.click.view.search link.tracker.click search New
link_tracker_click_view_tree link.tracker.click.view.list link.tracker.click list New
link_tracker_view_form link.tracker.view.form link.tracker form New
link_tracker_view_graph link.tracker.view.graph link.tracker graph New
link_tracker_view_search link.tracker.view.search link.tracker search New
link_tracker_view_tree link.tracker.view.list link.tracker list New
utm_campaign_view_form utm.campaign.view.form utm.campaign xpath Inherits utm.utm_campaign_view_form
utm_campaign_view_kanban utm.campaign.view.form utm.campaign xpath Inherits utm.utm_campaign_view_kanban
Models touched (5)

New fields (14)
  • absolute_url Char
    compute='_compute_absolute_url' args: 'Absolute URL'
  • campaign_id Many2one
    ondelete='set null'
  • code Char
    compute='_compute_code' inverse='_inverse_code' readonly=False string='Short URL code'
  • count Integer
    compute='_compute_count' store=True string='Number of Clicks'
  • label Char
    string='Button label'
  • link_click_ids One2many → link.tracker.click
    string='Clicks' args: 'link.tracker.click', 'link_id'
  • link_code_ids One2many → link.tracker.code
    string='Codes' args: 'link.tracker.code', 'link_id'
  • medium_id Many2one
    ondelete='set null'
  • redirected_url Char
    compute='_compute_redirected_url' string='Redirected URL'
  • short_url Char
    compute='_compute_short_url' search='_search_short_url' string='Tracked URL'
  • short_url_host Char
    compute='_compute_short_url_host' string='Host of the short URL'
  • source_id Many2one
    ondelete='set null'
  • title Char
    store=True string='Page Title'
  • url Char
    required=True string='Target URL'
Public methods (7)
  • action_view_statistics(self)
  • action_visit_page(self)
  • convert_links(self, html, vals, blacklist=None)
    @api.model
  • create(self, vals_list)
    @api.model_create_multi
  • get_url_from_code(self, code)
    @api.model
  • recent_links(self, filter, limit)
    @api.model
  • search_or_create(self, vals_list)
    @api.model
    Get existing or newly created records matching vals_list items in preserved order supporting duplicates.

New fields (4)
  • campaign_id Many2one → utm.campaign
    index='btree_not_null' ondelete='set null' related='link_id.campaign_id' store=True args: 'utm.campaign', 'UTM Campaign'
  • country_id Many2one → res.country
    args: 'res.country', 'Country'
  • ip Char
    string='Internet Protocol'
  • link_id Many2one → link.tracker
    index=True ondelete='cascade' required=True args: 'link.tracker', 'Link'
Public methods (1)
  • add_click(self, code, **route_values)
    @api.model
    Main API to add a click on a link.

New fields (2)
  • code Char
    required=True store=True string='Short URL Code'
  • link_id Many2one → link.tracker
    index=True ondelete='cascade' required=True args: 'link.tracker', 'Link'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • click_count Integer
    compute='_compute_clicks_count' string='Number of clicks generated by the campaign'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/18.0/link_tracker
VERSION
VERSION 1.1
CATEGORY
CATEGORYMarketing
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Xavier Morel, Aaron Bohy, Odoo Online, Julien Castiaux, Xavier-Do, std-odoo, Brice bib Bartoletti, Tiffany Chang (tic), Gorash, Florian Charlier, Vincent Larcin, bve-odoo, alsh-odoo, Louis Wicket (wil), Mahamadasif Ansari, amdi-odoo, Dylan Kiss (dyki), omra-odoo, dane@odoo.com, Louis (loti), sami odoo, Louis (wil), guce, yagp-odoo
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:25:54
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - utm
    - base
    - web
    - mail
    - base_setup
    - bus
    - web_tour
    - html_editor
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Shorten URLs and use them to track clicks and UTMs

Code Analysis

Views touched (10)
XML IDNameModelTypeStatus
link_tracker_click_view_form link.tracker.click.view.form link.tracker.click form New
link_tracker_click_view_graph link.tracker.click.view.graph link.tracker.click graph New
link_tracker_click_view_search link.tracker.click.view.search link.tracker.click search New
link_tracker_click_view_tree link.tracker.click.view.list link.tracker.click list New
link_tracker_view_form link.tracker.view.form link.tracker form New
link_tracker_view_graph link.tracker.view.graph link.tracker graph New
link_tracker_view_search link.tracker.view.search link.tracker search New
link_tracker_view_tree link.tracker.view.list link.tracker list New
utm_campaign_view_form utm.campaign.view.form utm.campaign xpath Inherits utm.utm_campaign_view_form
utm_campaign_view_kanban utm.campaign.view.form utm.campaign xpath Inherits utm.utm_campaign_view_kanban
Models touched (5)

New fields (14)
  • absolute_url Char
    compute='_compute_absolute_url' args: 'Absolute URL'
  • campaign_id Many2one
    ondelete='set null'
  • code Char
    compute='_compute_code' inverse='_inverse_code' readonly=False string='Short URL code'
  • count Integer
    compute='_compute_count' store=True string='Number of Clicks'
  • label Char
    string='Button label'
  • link_click_ids One2many → link.tracker.click
    string='Clicks' args: 'link.tracker.click', 'link_id'
  • link_code_ids One2many → link.tracker.code
    string='Codes' args: 'link.tracker.code', 'link_id'
  • medium_id Many2one
    ondelete='set null'
  • redirected_url Char
    compute='_compute_redirected_url' string='Redirected URL'
  • short_url Char
    compute='_compute_short_url' string='Tracked URL'
  • short_url_host Char
    compute='_compute_short_url_host' string='Host of the short URL'
  • source_id Many2one
    ondelete='set null'
  • title Char
    store=True string='Page Title'
  • url Char
    required=True string='Target URL'
Public methods (7)
  • action_view_statistics(self)
  • action_visit_page(self)
  • convert_links(self, html, vals, blacklist=None)
    @api.model
  • create(self, vals_list)
    @api.model_create_multi
  • get_url_from_code(self, code)
    @api.model
  • recent_links(self, filter, limit)
    @api.model
  • search_or_create(self, vals_list)
    @api.model
    Get existing or newly created records matching vals_list items in preserved order supporting duplicates.

New fields (4)
  • campaign_id Many2one → utm.campaign
    index='btree_not_null' ondelete='set null' related='link_id.campaign_id' store=True args: 'utm.campaign', 'UTM Campaign'
  • country_id Many2one → res.country
    args: 'res.country', 'Country'
  • ip Char
    string='Internet Protocol'
  • link_id Many2one → link.tracker
    index=True ondelete='cascade' required=True args: 'link.tracker', 'Link'
Public methods (1)
  • add_click(self, code, **route_values)
    @api.model
    Main API to add a click on a link.

New fields (2)
  • code Char
    required=True store=True string='Short URL Code'
  • link_id Many2one → link.tracker
    ondelete='cascade' required=True args: 'link.tracker', 'Link'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • click_count Integer
    compute='_compute_clicks_count' string='Number of clicks generated by the campaign'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/17.0/link_tracker
VERSION
VERSION 1.1
CATEGORY
CATEGORYMarketing
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Aaron Bohy, Odoo Online, Christophe Monniez, Julien Castiaux, Xavier-Do, std-odoo, Tiffany Chang (tic), Rémy Voet (ryv), Pierre Paridans, Florian Charlier, bve-odoo, alsh-odoo, Louis Wicket (wil), amdi-odoo, Dylan Kiss (dyki), Adrien Schoffeniels, dane@odoo.com, Louis (loti), Louis (wil), guce
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:02:05
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - utm
    - base
    - web
    - mail
    - base_setup
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Shorten URLs and use them to track clicks and UTMs

Code Analysis

Views touched (10)
XML IDNameModelTypeStatus
link_tracker_click_view_form link.tracker.click.view.form link.tracker.click form New
link_tracker_click_view_graph link.tracker.click.view.graph link.tracker.click graph New
link_tracker_click_view_search link.tracker.click.view.search link.tracker.click search New
link_tracker_click_view_tree link.tracker.click.view.tree link.tracker.click tree New
link_tracker_view_form link.tracker.view.form link.tracker form New
link_tracker_view_graph link.tracker.view.graph link.tracker graph New
link_tracker_view_search link.tracker.view.search link.tracker search New
link_tracker_view_tree link.tracker.view.tree link.tracker tree New
utm_campaign_view_form utm.campaign.view.form utm.campaign xpath Inherits utm.utm_campaign_view_form
utm_campaign_view_kanban utm.campaign.view.form utm.campaign xpath Inherits utm.utm_campaign_view_kanban
Models touched (5)

New fields (14)
  • absolute_url Char
    compute='_compute_absolute_url' args: 'Absolute URL'
  • campaign_id Many2one
    ondelete='set null'
  • code Char
    compute='_compute_code' string='Short URL code'
  • count Integer
    compute='_compute_count' store=True string='Number of Clicks'
  • label Char
    string='Button label'
  • link_click_ids One2many → link.tracker.click
    string='Clicks' args: 'link.tracker.click', 'link_id'
  • link_code_ids One2many → link.tracker.code
    string='Codes' args: 'link.tracker.code', 'link_id'
  • medium_id Many2one
    ondelete='set null'
  • redirected_url Char
    compute='_compute_redirected_url' string='Redirected URL'
  • short_url Char
    compute='_compute_short_url' string='Tracked URL'
  • short_url_host Char
    compute='_compute_short_url_host' string='Host of the short URL'
  • source_id Many2one
    ondelete='set null'
  • title Char
    store=True string='Page Title'
  • url Char
    required=True string='Target URL'
Public methods (7)
  • action_view_statistics(self)
  • action_visit_page(self)
  • convert_links(self, html, vals, blacklist=None)
    @api.model
  • create(self, vals_list)
    @api.model_create_multi
  • get_url_from_code(self, code)
    @api.model
  • recent_links(self, filter, limit)
    @api.model
  • search_or_create(self, vals)
    @api.model

New fields (4)
  • campaign_id Many2one → utm.campaign
    index='btree_not_null' ondelete='set null' related='link_id.campaign_id' store=True args: 'utm.campaign', 'UTM Campaign'
  • country_id Many2one → res.country
    args: 'res.country', 'Country'
  • ip Char
    string='Internet Protocol'
  • link_id Many2one → link.tracker
    index=True ondelete='cascade' required=True args: 'link.tracker', 'Link'
Public methods (1)
  • add_click(self, code, **route_values)
    @api.model
    Main API to add a click on a link.

New fields (2)
  • code Char
    required=True store=True string='Short URL Code'
  • link_id Many2one → link.tracker
    ondelete='cascade' required=True args: 'link.tracker', 'Link'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • click_count Integer
    compute='_compute_clicks_count' string='Number of clicks generated by the campaign'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/16.0/link_tracker
VERSION
VERSION 1.1
CATEGORY
CATEGORYMarketing
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Thibault Delavallée, Xavier Morel, Nicolas Lempereur, Aaron Bohy, Christophe Monniez, Julien Castiaux, Aurélien Warnon, Xavier-Do, Romeo Fragomeli, Andrea Grazioso (agr-odoo), std-odoo, Tiffany Chang (tic), Florian Charlier, bve-odoo, alsh-odoo, Adrien Schoffeniels, Louis (loti), guce
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:40:47
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - utm
    - base
    - web
    - mail
    - base_setup
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Shorten URLs and use them to track clicks and UTMs

Code Analysis

Views touched (10)
XML IDNameModelTypeStatus
link_tracker_click_view_form link.tracker.click.view.form link.tracker.click form New
link_tracker_click_view_graph link.tracker.click.view.graph link.tracker.click graph New
link_tracker_click_view_search link.tracker.click.view.search link.tracker.click search New
link_tracker_click_view_tree link.tracker.click.view.tree link.tracker.click tree New
link_tracker_view_form link.tracker.view.form link.tracker form New
link_tracker_view_graph link.tracker.view.graph link.tracker graph New
link_tracker_view_search link.tracker.view.search link.tracker search New
link_tracker_view_tree link.tracker.view.tree link.tracker tree New
utm_campaign_view_form utm.campaign.view.form utm.campaign xpath Inherits utm.utm_campaign_view_form
utm_campaign_view_kanban utm.campaign.view.form utm.campaign xpath Inherits utm.utm_campaign_view_kanban
Models touched (5)

New fields (14)
  • absolute_url Char
    compute='_compute_absolute_url' args: 'Absolute URL'
  • campaign_id Many2one
    ondelete='set null'
  • code Char
    compute='_compute_code' string='Short URL code'
  • count Integer
    compute='_compute_count' store=True string='Number of Clicks'
  • label Char
    string='Button label'
  • link_click_ids One2many → link.tracker.click
    string='Clicks' args: 'link.tracker.click', 'link_id'
  • link_code_ids One2many → link.tracker.code
    string='Codes' args: 'link.tracker.code', 'link_id'
  • medium_id Many2one
    ondelete='set null'
  • redirected_url Char
    compute='_compute_redirected_url' string='Redirected URL'
  • short_url Char
    compute='_compute_short_url' string='Tracked URL'
  • short_url_host Char
    compute='_compute_short_url_host' string='Host of the short URL'
  • source_id Many2one
    ondelete='set null'
  • title Char
    store=True string='Page Title'
  • url Char
    required=True string='Target URL'
Public methods (7)
  • action_view_statistics(self)
  • action_visit_page(self)
  • convert_links(self, html, vals, blacklist=None)
    @api.model
  • create(self, vals_list)
    @api.model_create_multi
  • get_url_from_code(self, code)
    @api.model
  • recent_links(self, filter, limit)
    @api.model
  • search_or_create(self, vals)
    @api.model

New fields (4)
  • campaign_id Many2one → utm.campaign
    ondelete='set null' related='link_id.campaign_id' store=True args: 'utm.campaign', 'UTM Campaign'
  • country_id Many2one → res.country
    args: 'res.country', 'Country'
  • ip Char
    string='Internet Protocol'
  • link_id Many2one → link.tracker
    index=True ondelete='cascade' required=True args: 'link.tracker', 'Link'
Public methods (1)
  • add_click(self, code, **route_values)
    @api.model
    Main API to add a click on a link.

New fields (2)
  • code Char
    required=True store=True string='Short URL Code'
  • link_id Many2one → link.tracker
    ondelete='cascade' required=True args: 'link.tracker', 'Link'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • click_count Integer
    compute='_compute_clicks_count' string='Number of clicks generated by the campaign'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/15.0/link_tracker
VERSION
VERSION 1.1
CATEGORY
CATEGORYMarketing
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Thibault Delavallée, Xavier Morel, Nicolas Lempereur, Jeremy Kersten, Barad Mahendra, Romain Derie, Christophe Monniez, Julien Castiaux, Xavier-Do, Andrea Grazioso (agr-odoo), std-odoo, Ivan Yelizariev, Mathieu Duckerts-Antoine, ijas ahammed, Krzysztof Magusiak, Florian Charlier, bve-odoo
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:25:26
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - utm
    - base
    - web
    - mail
    - base_setup
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Shorten URLs and use them to track clicks and UTMs

Code Analysis

Views touched (10)
XML IDNameModelTypeStatus
link_tracker_click_view_form link.tracker.click.view.form link.tracker.click form New
link_tracker_click_view_graph link.tracker.click.view.graph link.tracker.click graph New
link_tracker_click_view_search link.tracker.click.view.search link.tracker.click search New
link_tracker_click_view_tree link.tracker.click.view.tree link.tracker.click tree New
link_tracker_view_form link.tracker.view.form link.tracker form New
link_tracker_view_graph link.tracker.view.graph link.tracker graph New
link_tracker_view_search link.tracker.view.search link.tracker search New
link_tracker_view_tree link.tracker.view.tree link.tracker tree New
utm_campaign_view_form utm.campaign.view.form utm.campaign xpath Inherits utm.utm_campaign_view_form
utm_campaign_view_kanban utm.campaign.view.form utm.campaign xpath Inherits utm.utm_campaign_view_kanban
Models touched (5)

New fields (11)
  • absolute_url Char
    compute='_compute_absolute_url' args: 'Absolute URL'
  • code Char
    compute='_compute_code' string='Short URL code'
  • count Integer
    compute='_compute_count' store=True string='Number of Clicks'
  • label Char
    string='Button label'
  • link_click_ids One2many → link.tracker.click
    string='Clicks' args: 'link.tracker.click', 'link_id'
  • link_code_ids One2many → link.tracker.code
    string='Codes' args: 'link.tracker.code', 'link_id'
  • redirected_url Char
    compute='_compute_redirected_url' string='Redirected URL'
  • short_url Char
    compute='_compute_short_url' string='Tracked URL'
  • short_url_host Char
    compute='_compute_short_url_host' string='Host of the short URL'
  • title Char
    store=True string='Page Title'
  • url Char
    required=True string='Target URL'
Public methods (7)
  • action_view_statistics(self)
  • action_visit_page(self)
  • convert_links(self, html, vals, blacklist=None)
    @api.model
  • create(self, vals_list)
    @api.model_create_multi
  • get_url_from_code(self, code)
    @api.model
  • recent_links(self, filter, limit)
    @api.model
  • search_or_create(self, vals)
    @api.model

New fields (4)
  • campaign_id Many2one → utm.campaign
    related='link_id.campaign_id' store=True args: 'utm.campaign', 'UTM Campaign'
  • country_id Many2one → res.country
    args: 'res.country', 'Country'
  • ip Char
    string='Internet Protocol'
  • link_id Many2one → link.tracker
    index=True ondelete='cascade' required=True args: 'link.tracker', 'Link'
Public methods (1)
  • add_click(self, code, **route_values)
    @api.model
    Main API to add a click on a link.

New fields (2)
  • code Char
    required=True store=True string='Short URL Code'
  • link_id Many2one → link.tracker
    ondelete='cascade' required=True args: 'link.tracker', 'Link'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • click_count Integer
    compute='_compute_clicks_count' string='Number of clicks generated by the campaign'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/14.0/link_tracker
VERSION
VERSION 1.1
CATEGORY
CATEGORYMarketing
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Olivier Dony, Thibault Delavallée, Christophe Simonis, Xavier Morel, Nicolas Lempereur, Aaron Bohy, Yannick Tivisse, Dharmraj Jhala, Christophe Monniez, Xavier-Do, Andrea Grazioso (agr-odoo), fw-bot, Debauche Stéphane, std-odoo, Ivan Yelizariev, Mathieu Duckerts-Antoine, Kevin Baptiste, roen-odoo, ryv-odoo, ijas ahammed, Krzysztof Magusiak, bve-odoo
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:14:28
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - utm
    - base
    - web
    - mail
    - base_setup
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Shorten URLs and use them to track clicks and UTMs

Code Analysis

Views touched (10)
XML IDNameModelTypeStatus
link_tracker_click_view_form link.tracker.click.view.form link.tracker.click form New
link_tracker_click_view_graph link.tracker.click.view.graph link.tracker.click graph New
link_tracker_click_view_search link.tracker.click.view.search link.tracker.click search New
link_tracker_click_view_tree link.tracker.click.view.tree link.tracker.click tree New
link_tracker_view_form link.tracker.view.form link.tracker form New
link_tracker_view_graph link.tracker.view.graph link.tracker graph New
link_tracker_view_search link.tracker.view.search link.tracker search New
link_tracker_view_tree link.tracker.view.tree link.tracker tree New
utm_campaign_view_form utm.campaign.view.form utm.campaign xpath Inherits utm.utm_campaign_view_form
utm_campaign_view_kanban utm.campaign.view.form utm.campaign xpath Inherits utm.utm_campaign_view_kanban
Models touched (5)

New fields (11)
  • absolute_url Char
    compute='_compute_absolute_url' args: 'Absolute URL'
  • code Char
    compute='_compute_code' string='Short URL code'
  • count Integer
    compute='_compute_count' store=True string='Number of Clicks'
  • label Char
    string='Button label'
  • link_click_ids One2many → link.tracker.click
    string='Clicks' args: 'link.tracker.click', 'link_id'
  • link_code_ids One2many → link.tracker.code
    string='Codes' args: 'link.tracker.code', 'link_id'
  • redirected_url Char
    compute='_compute_redirected_url' string='Redirected URL'
  • short_url Char
    compute='_compute_short_url' string='Tracked URL'
  • short_url_host Char
    compute='_compute_short_url_host' string='Host of the short URL'
  • title Char
    store=True string='Page Title'
  • url Char
    required=True string='Target URL'
Public methods (6)
  • action_view_statistics(self)
  • action_visit_page(self)
  • convert_links(self, html, vals, blacklist=None)
    @api.model
  • create(self, vals)
    @api.model
  • get_url_from_code(self, code)
    @api.model
  • recent_links(self, filter, limit)
    @api.model

New fields (4)
  • campaign_id Many2one → utm.campaign
    related='link_id.campaign_id' store=True args: 'utm.campaign', 'UTM Campaign'
  • country_id Many2one → res.country
    args: 'res.country', 'Country'
  • ip Char
    string='Internet Protocol'
  • link_id Many2one → link.tracker
    index=True ondelete='cascade' required=True args: 'link.tracker', 'Link'
Public methods (1)
  • add_click(self, code, **route_values)
    @api.model
    Main API to add a click on a link.

New fields (2)
  • code Char
    required=True store=True string='Short URL Code'
  • link_id Many2one → link.tracker
    ondelete='cascade' required=True args: 'link.tracker', 'Link'
Public methods (1)
  • get_random_code_string(self)
    @api.model

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • click_count Integer
    compute='_compute_clicks_count' string='Number of clicks generated by the campaign'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/13.0/link_tracker
VERSION
VERSION 1.0
CATEGORY
CATEGORYMarketing
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Xavier Morel, Nicolas Lempereur, Yannick Tivisse, Romain Derie, Adrian Torres, Aurélien Warnon, Xavier-Do, Andrea Grazioso (agr-odoo), Paul Morelle, std-odoo, Ivan Yelizariev, fja-odoo, ijas ahammed, Krzysztof Magusiak
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:06:41
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - utm
    - base
    - web
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Shorten URLs and use them to track clicks and UTMs

Code Analysis

Views touched (10)
XML IDNameModelTypeStatus
link_tracker_click_view_form link.tracker.click.view.form link.tracker.click form New
link_tracker_click_view_graph link.tracker.click.view.graph link.tracker.click graph New
link_tracker_click_view_search link.tracker.click.view.search link.tracker.click search New
link_tracker_click_view_tree link.tracker.click.view.tree link.tracker.click tree New
link_tracker_view_form link.tracker.view.form link.tracker form New
link_tracker_view_graph link.tracker.view.graph link.tracker graph New
link_tracker_view_search link.tracker.view.search link.tracker search New
link_tracker_view_tree link.tracker.view.tree link.tracker tree New
utm_campaign_view_form utm.campaign.view.form utm.campaign xpath Inherits utm.utm_campaign_view_form
utm_campaign_view_kanban utm.campaign.view.form utm.campaign xpath Inherits utm.utm_campaign_view_kanban
Models touched (4)

New fields (11)
  • code Char
    compute='_compute_code' string='Short URL code'
  • count Integer
    compute='_compute_count' store=True string='Number of Clicks'
  • favicon Char
    compute='_compute_favicon' store=True string='Favicon'
  • icon_src Char
    compute='_compute_icon_src' string='Favicon Source'
  • link_click_ids One2many → link.tracker.click
    string='Clicks' args: 'link.tracker.click', 'link_id'
  • link_code_ids One2many → link.tracker.code
    string='Codes' args: 'link.tracker.code', 'link_id'
  • redirected_url Char
    compute='_compute_redirected_url' string='Redirected URL'
  • short_url Char
    compute='_compute_short_url' string='Tracked URL'
  • short_url_host Char
    compute='_compute_short_url_host' string='Host of the short URL'
  • title Char
    store=True string='Page Title'
  • url Char
    required=True string='Target URL'
Public methods (6)
  • action_view_statistics(self)
  • action_visit_page(self)
  • convert_links(self, html, vals, blacklist=None)
    @api.model
  • create(self, vals)
    @api.model
  • get_url_from_code(self, code)
    @api.model
  • recent_links(self, filter, limit)
    @api.model

New fields (4)
  • campaign_id Many2one → utm.campaign
    comodel_name='utm.campaign' related='link_id.campaign_id' store=True string='UTM Campaign'
  • country_id Many2one → res.country
    args: 'res.country', 'Country'
  • ip Char
    string='Internet Protocol'
  • link_id Many2one → link.tracker
    ondelete='cascade' required=True args: 'link.tracker', 'Link'
Public methods (1)
  • add_click(self, code, **route_values)
    @api.model
    Main API to add a click on a link.

New fields (2)
  • code Char
    required=True store=True string='Short URL Code'
  • link_id Many2one → link.tracker
    ondelete='cascade' required=True args: 'link.tracker', 'Link'
Public methods (1)
  • get_random_code_string(self)
    @api.model

New fields (1)
  • click_count Integer
    compute='_compute_clicks_count' string='Number of clicks generated by the campaign'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/12.0/link_tracker
VERSION
VERSION 1.0
CATEGORY
CATEGORYMarketing
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Thibault Delavallée, Christophe Simonis, Yannick Tivisse, Alexandre Kühn, Xavier-Do, Luis González, std-odoo, Ivan Yelizariev
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:57:00
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - utm
    - base
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Create short and trackable URLs.
=====================================================

        

Code Analysis

Views touched (8)
XML IDNameModelTypeStatus
view_link_tracker_click_form link.tracker.click.form link.tracker.click form New
view_link_tracker_click_graph link.tracker.click.graph link.tracker.click graph New
view_link_tracker_click_tree link.tracker.click.tree link.tracker.click tree New
view_link_tracker_filter Links link.tracker search New
view_link_tracker_form link.tracker.form link.tracker form New
view_link_tracker_form_stats link.tracker.my.form link.tracker form New
view_link_tracker_graph link.tracker.graph link.tracker graph New
view_link_tracker_tree link.tracker.tree link.tracker tree New
Models touched (3)

New fields (11)
  • code Char
    compute='_compute_code' string='Short URL code'
  • count Integer
    compute='_compute_count' store=True string='Number of Clicks'
  • favicon Char
    compute='_compute_favicon' store=True string='Favicon'
  • icon_src Char
    compute='_compute_icon_src' string='Favicon Source'
  • link_click_ids One2many → link.tracker.click
    string='Clicks' args: 'link.tracker.click', 'link_id'
  • link_code_ids One2many → link.tracker.code
    string='Codes' args: 'link.tracker.code', 'link_id'
  • redirected_url Char
    compute='_compute_redirected_url' string='Redirected URL'
  • short_url Char
    compute='_compute_short_url' string='Tracked URL'
  • short_url_host Char
    compute='_compute_short_url_host' string='Host of the short URL'
  • title Char
    store=True string='Page Title'
  • url Char
    required=True string='Target URL'
Public methods (6)
  • action_view_statistics(self)
    @api.multi
  • action_visit_page(self)
    @api.multi
  • convert_links(self, html, vals, blacklist=None)
    @api.model
  • create(self, vals)
    @api.model
  • get_url_from_code(self, code, context=None)
    @api.model
  • recent_links(self, filter, limit)
    @api.model

New fields (4)
  • click_date Date
    string='Create Date'
  • country_id Many2one → res.country
    args: 'res.country', 'Country'
  • ip Char
    string='Internet Protocol'
  • link_id Many2one → link.tracker
    ondelete='cascade' required=True args: 'link.tracker', 'Link'
Public methods (1)
  • add_click(self, code, ip, country_code, stat_id=False)
    @api.model

New fields (2)
  • code Char
    store=True string='Short URL Code'
  • link_id Many2one → link.tracker
    ondelete='cascade' required=True args: 'link.tracker', 'Link'
Public methods (1)
  • get_random_code_string(self)
    @api.model
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/11.0/link_tracker
VERSION
VERSION 1.0
CATEGORY
CATEGORYMarketing
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Olivier Dony, Christophe Simonis, Xavier Morel, Jeremy Kersten, GitHub, Yannick Tivisse, Odoo Online
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:53:42
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - utm
    - base
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Create short and trackable URLs.
=====================================================

        

Code Analysis

Views touched (8)
XML IDNameModelTypeStatus
view_link_tracker_click_form link.tracker.click.form link.tracker.click form New
view_link_tracker_click_graph link.tracker.click.graph link.tracker.click graph New
view_link_tracker_click_tree link.tracker.click.tree link.tracker.click tree New
view_link_tracker_filter Links link.tracker search New
view_link_tracker_form link.tracker.form link.tracker form New
view_link_tracker_form_stats link.tracker.my.form link.tracker form New
view_link_tracker_graph link.tracker.graph link.tracker graph New
view_link_tracker_tree link.tracker.tree link.tracker tree New
Models touched (3)

New fields (11)
  • code Char
    compute='_compute_code' string='Short URL code'
  • count Integer
    compute='_compute_count' store=True string='Number of Clicks'
  • favicon Char
    compute='_compute_favicon' store=True string='Favicon'
  • icon_src Char
    compute='_compute_icon_src' string='Favicon Source'
  • link_click_ids One2many → link.tracker.click
    string='Clicks' args: 'link.tracker.click', 'link_id'
  • link_code_ids One2many → link.tracker.code
    string='Codes' args: 'link.tracker.code', 'link_id'
  • redirected_url Char
    compute='_compute_redirected_url' string='Redirected URL'
  • short_url Char
    compute='_compute_short_url' string='Tracked URL'
  • short_url_host Char
    compute='_compute_short_url_host' string='Host of the short URL'
  • title Char
    store=True string='Page Title'
  • url Char
    required=True string='Target URL'
Public methods (6)
  • action_view_statistics(self)
    @api.multi
  • action_visit_page(self)
    @api.multi
  • convert_links(self, html, vals, blacklist=None)
    @api.model
  • create(self, vals)
    @api.model
  • get_url_from_code(self, code, context=None)
    @api.model
  • recent_links(self, filter, limit)
    @api.model

New fields (4)
  • click_date Date
    string='Create Date'
  • country_id Many2one → res.country
    args: 'res.country', 'Country'
  • ip Char
    string='Internet Protocol'
  • link_id Many2one → link.tracker
    ondelete='cascade' required=True args: 'link.tracker', 'Link'
Public methods (1)
  • add_click(self, code, ip, country_code, stat_id=False)
    @api.model

New fields (2)
  • code Char
    store=True string='Short URL Code'
  • link_id Many2one → link.tracker
    ondelete='cascade' required=True args: 'link.tracker', 'Link'
Public methods (1)
  • get_random_code_string(self)
    @api.model
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/10.0/link_tracker
VERSION
VERSION 1.0
CATEGORY
CATEGORYMarketing
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Martin Trigaux, Olivier Dony, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Nicolas Martinelli, Julien Legros, Richard Mathot, qdp-odoo, Yannick Tivisse
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:50:47
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - utm
    - base
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Create short and trackable URLs.
=====================================================

        

Code Analysis

Views touched (8)
XML IDNameModelTypeStatus
view_link_tracker_click_form link.tracker.click.form link.tracker.click form New
view_link_tracker_click_graph link.tracker.click.graph link.tracker.click graph New
view_link_tracker_click_tree link.tracker.click.tree link.tracker.click tree New
view_link_tracker_filter Links link.tracker search New
view_link_tracker_form link.tracker.form link.tracker form New
view_link_tracker_form_stats link.tracker.my.form link.tracker form New
view_link_tracker_graph link.tracker.graph link.tracker graph New
view_link_tracker_tree link.tracker.tree link.tracker tree New
Models touched (3)

New fields (11)
  • code Char
    compute='_compute_code' string='Short URL code'
  • count Integer
    compute='_compute_count' store=True string='Number of Clicks'
  • favicon Char
    compute='_compute_favicon' store=True string='Favicon'
  • icon_src Char
    compute='_compute_icon_src' string='Favicon Source'
  • link_click_ids One2many → link.tracker.click
    string='Clicks' args: 'link.tracker.click', 'link_id'
  • link_code_ids One2many → link.tracker.code
    string='Codes' args: 'link.tracker.code', 'link_id'
  • redirected_url Char
    compute='_compute_redirected_url' string='Redirected URL'
  • short_url Char
    compute='_compute_short_url' string='Tracked URL'
  • short_url_host Char
    compute='_compute_short_url_host' string='Host of the short URL'
  • title Char
    store=True string='Page Title'
  • url Char
    required=True string='Target URL'
Public methods (6)
  • action_view_statistics(self)
    @api.multi
  • action_visit_page(self)
    @api.multi
  • convert_links(self, html, vals, blacklist=None)
    @api.model
  • create(self, vals)
    @api.model
  • get_url_from_code(self, code, context=None)
    @api.model
  • recent_links(self, filter, limit)
    @api.model

New fields (4)
  • click_date Date
    string='Create Date'
  • country_id Many2one → res.country
    args: 'res.country', 'Country'
  • ip Char
    string='Internet Protocol'
  • link_id Many2one → link.tracker
    ondelete='cascade' required=True args: 'link.tracker', 'Link'
Public methods (1)
  • add_click(self, code, ip, country_code, stat_id=False)
    @api.model

New fields (2)
  • code Char
    store=True string='Short URL Code'
  • link_id Many2one → link.tracker
    ondelete='cascade' required=True args: 'link.tracker', 'Link'
Public methods (1)
  • get_random_code_string(self)
    @api.model
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/9.0/link_tracker
VERSION
VERSION 1.0
CATEGORY
CATEGORYMarketing
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSOdoo Translation Bot, Christophe Matthieu, Martin Trigaux, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Yannick Tivisse
WEBSITE
WEBSITE
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:48:30
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - marketing
    - base
    - base_setup
    - web_kanban
    - web
    - utm
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Create short and trackable URLs.
=====================================================

        

Code Analysis

Views touched (8)
XML IDNameModelTypeStatus
view_link_tracker_click_form link.tracker.click.form link.tracker.click form New
view_link_tracker_click_graph link.tracker.click.graph link.tracker.click graph New
view_link_tracker_click_tree link.tracker.click.tree link.tracker.click tree New
view_link_tracker_filter Links link.tracker search New
view_link_tracker_form link.tracker.form link.tracker form New
view_link_tracker_form_stats link.tracker.my.form link.tracker form New
view_link_tracker_graph link.tracker.graph link.tracker graph New
view_link_tracker_tree link.tracker.tree link.tracker tree New
Models touched (3)

New fields (11)
  • code Char
    compute='_compute_code' string='Short URL code'
  • count Integer
    compute='_compute_count' store=True string='Number of Clicks'
  • favicon Char
    compute='_compute_favicon' store=True string='Favicon'
  • icon_src Char
    compute='_compute_icon_src' string='Favicon Source'
  • link_click_ids One2many → link.tracker.click
    string='Clicks' args: 'link.tracker.click', 'link_id'
  • link_code_ids One2many → link.tracker.code
    string='Codes' args: 'link.tracker.code', 'link_id'
  • redirected_url Char
    compute='_compute_redirected_url' string='Redirected URL'
  • short_url Char
    compute='_compute_short_url' string='Tracked URL'
  • short_url_host Char
    compute='_compute_short_url_host' string='Host of the short URL'
  • title Char
    store=True string='Page Title'
  • url Char
    required=True string='Target URL'
Public methods (6)
  • action_view_statistics(self)
    @api.multi
  • action_visit_page(self)
    @api.multi
  • convert_links(self, html, vals, blacklist=None)
    @api.model
  • create(self, vals)
    @api.model
  • get_url_from_code(self, code, context=None)
    @api.model
  • recent_links(self, filter, limit)
    @api.model

New fields (4)
  • click_date Date
    string='Create Date'
  • country_id Many2one → res.country
    args: 'res.country', 'Country'
  • ip Char
    string='Internet Protocol'
  • link_id Many2one → link.tracker
    ondelete='cascade' required=True args: 'link.tracker', 'Link'
Public methods (1)
  • add_click(self, code, ip, country_code, stat_id=False)
    @api.model

New fields (2)
  • code Char
    store=True string='Short URL Code'
  • link_id Many2one → link.tracker
    ondelete='cascade' required=True args: 'link.tracker', 'Link'
Public methods (1)
  • get_random_code_string(self)
    @api.model