What do Web Analytics and the new Customer Community have in common?  They’re the awesome new features released today that will help you increase exposure for YOUR apps!

The AppExchange team is excited to announce the new Web Analytics report and the re-launch of the Customer Community.

Web Analytics
You told us you want to have access to web analytics data to see if your AppExchange marketing efforts are actually paying off.   We heard you loud and clear.  Introducing the new Web Analytics report – your source for measuring page views, visitors, and searches on your listings.

So how can you make this report work for you?  Here are three great ways to get started –

  1. Measure the impact of your campaigns.  Did all that work you just put into that marketing campaign pay off?  Did it increase page views and visitors?
  2. Are visitors finding you through search?  Now you can see both SEO search visitors as well as internal AppExchange search visitors.
  3. Use the Web Analytics report along with the other reports available through the AppExchange to understand your funnel.  Combine data about the traffic on your listing with the views of your screenshots and demos, leads, Get It Now clicks, and Installs to get the full picture of how successful you are of converting visitors into customers.

 

To learn more about this new report or learn how to access reports on the AppExchange, visit the AppExchange Analytics page on the Partner Portal.

Customer Community Re-Launch
Are you a part of the Customer Community?  The AppExchange is – so you should be, too!

The new Customer Community launched today which includes not only a fantastic facelift, but many links back to the AppExchange.  Even better – apps are now incorporated into search and ideas to show related apps based on the content the customer is viewing.  In a community of over 800,000 registered users, that’s a pretty big deal.

Think of the community as an instant focus group with real-time feedback on what customers want most.  Don’t miss out on your opportunity to interact, increase exposure for your app, and establish yourself as a trusted expert.  Here’s how to get involved:

  • Look through popular and trending ideas – these are the problems our customers are facing and need your help solving.
  • Customers have questions, and you have the answers.  Show off your expertise in the Answers section.
  • Build a following (and your brand) on Chatter.  Start a dialogue, follow interesting people, and collaborate with this passionate community.
tagged , , , Bookmark the permalink. Trackbacks are closed, but you can post a comment.
  • Mitesh Sura

    Like new community and AppExchange is best place to sell apps. One request though, please create license records for sandbox orgs just like you do when someone installs the app in production org. That will hep ISVs a lot.

  • Thomas Oldroyd

    AppExchange analytics! Great work team. We love the visibility and tracking for the PowerDialer.

  • Alfredo Arias

    /**
    * Interface containing methods Trigger
    Handlers must implement to enforce best practice
    * and bulkification of triggers.

    */

    public interface
    ITrigger

    {

    /**

    * bulkBefore

    *

    * This method is called prior to execution of
    a BEFORE trigger. Use this to cache

    * any data required into maps prior execution
    of the trigger.

    */

    void bulkBefore();

    /**

    * bulkAfter

    *

    * This method is called prior to execution of
    an AFTER trigger. Use this to cache

    * any data required into maps prior execution
    of the trigger.

    */

    void bulkAfter();

    /**

    * beforeInsert

    *

    * This method is called iteratively for each
    record to be inserted during a BEFORE

    * trigger. Never execute any SOQL/SOSL etc in
    this and other iterative methods.

    */

    void beforeInsert(SObject so);

    /**

    * beforeUpdate

    *

    * This method is called iteratively for each
    record to be updated during a BEFORE

    * trigger.

    */

    void beforeUpdate(SObject oldSo,
    SObject so);

    /**

    * beforeDelete

    *

    * This method is called iteratively for each
    record to be deleted during a BEFORE

    * trigger.

    */

    void beforeDelete(SObject so);

    /**

    * afterInsert

    *

    * This method is called iteratively for each
    record inserted during an AFTER

    * trigger. Always put field validation in the
    ‘After’ methods in case another trigger

    * has modified any values. The record is ‘read
    only’ by this point.

    */

    void afterInsert(SObject so);

    /**

    * afterUpdate

    *

    * This method is called iteratively for each
    record updated during an AFTER

    * trigger.

    */

    void afterUpdate(SObject oldSo,
    SObject so);

    /**

    * afterDelete

    *

    * This method is called iteratively for each
    record deleted during an AFTER

    * trigger.

    */

    void afterDelete(SObject so);

    /**

    * andFinally

    *

    * This method is called once all records have
    been processed by the trigger. Use this

    * method to accomplish any final operations
    such as creation or updates of other records.

    */

    void andFinally();

    }

  • Alfredo Arias

    /**

    * Interface containing methods Trigger
    Handlers must implement to enforce best practice

    * and bulkification of triggers.

    */

    public interface
    ITrigger

    {

    /**

    * bulkBefore

    *

    * This method is called prior to execution of
    a BEFORE trigger. Use this to cache

    * any data required into maps prior execution
    of the trigger.

    */

    void bulkBefore();

    /**

    * bulkAfter

    *

    * This method is called prior to execution of
    an AFTER trigger. Use this to cache

    * any data required into maps prior execution
    of the trigger.

    */

    void bulkAfter();

    /**

    * beforeInsert

    *

    * This method is called iteratively for each
    record to be inserted during a BEFORE

    * trigger. Never execute any SOQL/SOSL etc in
    this and other iterative methods.

    */

    void beforeInsert(SObject so);

    /**

    * beforeUpdate

    *

    * This method is called iteratively for each
    record to be updated during a BEFORE

    * trigger.

    */

    void beforeUpdate(SObject oldSo,
    SObject so);

    /**

    * beforeDelete

    *

    * This method is called iteratively for each
    record to be deleted during a BEFORE

    * trigger.

    */

    void beforeDelete(SObject so);

    /**

    * afterInsert

    *

    * This method is called iteratively for each
    record inserted during an AFTER

    * trigger. Always put field validation in the
    ‘After’ methods in case another trigger

    * has modified any values. The record is ‘read
    only’ by this point.

    */

    void afterInsert(SObject so);

    /**

    * afterUpdate

    *

    * This method is called iteratively for each
    record updated during an AFTER

    * trigger.

    */

    void afterUpdate(SObject oldSo,
    SObject so);

    /**

    * afterDelete

    *

    * This method is called iteratively for each
    record deleted during an AFTER

    * trigger.

    */

    void afterDelete(SObject so);

    /**

    * andFinally

    *

    * This method is called once all records have
    been processed by the trigger. Use this

    * method to accomplish any final operations
    such as creation or updates of other records.

    */

    void andFinally();

    }

  • Alfredo Arias

    function startTime()

    {

    var today=new Date();

    var h=today.getHours();

    var m=today.getMinutes();

    var s=today.getSeconds();

    // add a zero in front of numbers<10

    m=checkTime(m);

    s=checkTime(s);

    document.getElementById('txt').innerHTML=h+":"+m+":"+s;

    t=setTimeout(function(){startTime()},500);

    }

    function checkTime(i)

    {

    if (i<10)

    {

    i="0" + i;

    }

    return i;

    }

  • Alfredo Arias

    function startTime()

    {

    var today=new Date();

    var h=today.getHours();

    var m=today.getMinutes();

    var s=today.getSeconds();

    // add a zero in front of numbers<10

    m=checkTime(m);

    s=checkTime(s);

    document.getElementById('txt').innerHTML=h+":"+m+":"+s;

    t=setTimeout(function(){startTime()},500);

    }

    function checkTime(i)

    {

    if (i<10)

    {

    i="0" + i;

    }

    return i;

    }