diff --git a/src/Project/Controllers/ProjectController.cs b/src/Project/Controllers/ProjectController.cs
index 30a2413c22962701cc3b28db18a070a2198ca0d3..65f95e6f96c9359adccbbcc3c42ae2007153d983 100644
--- a/src/Project/Controllers/ProjectController.cs
+++ b/src/Project/Controllers/ProjectController.cs
@@ -115,7 +115,7 @@ namespace Coscine.Api.Project.Controllers
             var project = _projectModel.GetById(Guid.Parse(id));
             if (_projectModel.HasAccess(user, project, UserRoles.Member, UserRoles.Owner))
             {
-                SubProjectModel subProjectModel = new SubProjectModel();
+                var subProjectModel = new SubProjectModel();
                 var subProjectRel = subProjectModel.GetAllWhere((subProject) => subProject.SubProjectId == project.Id && !project.Deleted);
 
                 var parentProjectRelation = subProjectRel.FirstOrDefault();
@@ -422,6 +422,12 @@ namespace Coscine.Api.Project.Controllers
                 projectQuotaForCurrent.Quota = updateProjectQuotaObject.Allocated;
                 _projectQuotaModel.Update(projectQuotaForCurrent);
             }
+
+            if (Request.Query != null && Request.Query["noanalyticslog"] != "true")
+            {
+                LogAnalyticsOwnerProjectQuotaChange(project, user);
+            }
+
             return NoContent();
         }
 
@@ -652,6 +658,33 @@ namespace Coscine.Api.Project.Controllers
             return new ActionResult<IEnumerable<InvitationReturnObject>>(invitations);
         }
 
+        /// <summary>
+        /// Call to analytics logger.
+        /// </summary>
+        /// <param name="projectId">Project id of the project</param>
+        /// <returns>204 no content</returns>
+        [HttpGet("[controller]/{projectId}/-/create-profile")]
+        public IActionResult CreateApplicationProfile(Guid projectId)
+        {
+            var project = _projectModel.GetById(projectId);
+
+            if (project == null)
+            {
+                return NotFound($@"The project ""{projectId}"" was not found.");
+            }
+
+            var user = _authenticator.GetUser();
+
+            if (!_projectModel.HasAccess(user, project, UserRoles.Owner))
+            {
+                return Unauthorized("You are not an owner of the project.");
+            }
+
+            LogAnalyticsCreateApplicationProfile(project, user);
+
+            return NoContent();
+        }
+
         /// <summary>
         /// Create and send an invitation to specified mail.
         /// </summary>
@@ -721,6 +754,11 @@ namespace Coscine.Api.Project.Controllers
 
             NotificationBusUtil.Send(Program.Configuration, "user_invitation", NotificationBusUtil.GetUserList(new User { EmailAddress = sendInvitationObject.Email }), sendInvitationObject.Project.ToString(), body);
 
+            if (Request.Query != null && Request.Query["noanalyticslog"] != "true")
+            {
+                LogAnalyticsInviteExternalUser(project, user);
+            }
+
             return NoContent();
         }
 
@@ -914,5 +952,50 @@ namespace Coscine.Api.Project.Controllers
                     Visibility = project.VisibilityId.HasValue ? _visibilityModel.GetById(project.VisibilityId.Value)?.DisplayName : null,
                 });
         }
+
+        private void LogAnalyticsOwnerProjectQuotaChange(Database.DataModel.Project project, User user)
+        {
+            var resourceTypes = _resourceTypeModel.GetAllWhere(x => x.Enabled == true);
+
+            var objects = resourceTypes.Select(x => CreateProjectQuotaReturnObject(x, project.Id));
+
+            _coscineLogger.AnalyticsLog(
+                new AnalyticsLogObject
+                {
+                    Type = "Action",
+                    Operation = "Owner Project Quota Change",
+                    RoleId = _projectRoleModel.GetGetUserRoleForProject(project.Id, user.Id).ToString(),
+                    ProjectId = project.Id.ToString(),
+                    QuotaSize = objects.Select(x => $"{x.Name}: {x.Used}/{x.Allocated}").ToList()
+                });
+        }
+
+        private void LogAnalyticsInviteExternalUser(Database.DataModel.Project project, User user)
+        {
+            var resourceTypes = _resourceTypeModel.GetAllWhere(x => x.Enabled == true);
+
+            var objects = resourceTypes.Select(x => CreateProjectQuotaReturnObject(x, project.Id));
+
+            _coscineLogger.AnalyticsLog(
+                new AnalyticsLogObject
+                {
+                    Type = "Action",
+                    Operation = "Invite External User",
+                    RoleId = _projectRoleModel.GetGetUserRoleForProject(project.Id, user.Id).ToString(),
+                    ProjectId = project.Id.ToString()
+                });
+        }
+
+        private void LogAnalyticsCreateApplicationProfile(Database.DataModel.Project project, User user)
+        {
+            _coscineLogger.AnalyticsLog(
+                new AnalyticsLogObject
+                {
+                    Type = "Action",
+                    Operation = "Create Application Profile",
+                    RoleId = _projectRoleModel.GetGetUserRoleForProject(project.Id, user.Id).ToString(),
+                    ProjectId = project.Id.ToString()
+                });
+        }
     }
-}
+}
\ No newline at end of file