A Guide to Publishing Your First AppExchange App

By Jakub Stefaniak

I still recall the days, years ago, when I first delved into creating my very own AppExchange app. My mind buzzed with ideas, but the path to becoming an ISV partner wasn’t straightforward.

There’s a mountain of knowledge you’ve got to climb, and those early days are rife with opportunities for expensive blunders. If you have spent years in the Salesforce ecosystem and have identified pain points that you believe you can solve, AppExchange can be the ideal platform to monetize your idea.

The AppExchange provides a marketplace for developers to sell their applications to Salesforce users, both existing and new ones. However, before embarking on your journey to craft that debut app, do you know what exactly you should be acquainted with to thrive as a successful ISV partner?

Setting the Stage

By becoming an AppExchange partner, you gain access to a vast and growing marketplace with opportunities for growth and innovation. The ongoing success of the Salesforce economy demonstrates that there is always room for new and remarkable offerings.

It is crucial to start by defining the specific problems or tasks your application aims to solve for Salesforce users. This involves identifying pain points, understanding user needs, and determining how your app can provide a solution. By clearly defining your app’s ‘jobs to be done’, you can ensure that your app meets the needs of your target audience and provides value.

You should consider whether you want to sell to new Salesforce users or existing ones. Selling to new users through OEM allows you to tap into a broader market and potentially reach a larger customer base. On the other hand, selling to existing Salesforce customers through ISVforce provides the advantage of targeting users who are already familiar with the platform and may be more likely to adopt new applications.

READ MORE: What Is Salesforce OEM – How Do I Get Started With My App Idea?

You already have an idea of who your customers are and what problems you are going to solve for them? Before you write any line of code, let’s think how exactly you want to monetize it.

Pricing strategy is an integral part of the design process because it directly affects the development decisions and positioning of the app in the market. The pricing of an app is not just a label but a strategic aspect that impacts various aspects of the app’s design and development. By considering pricing from the concept stage, you can make informed decisions about the features, functionality, and target audience of the app.

Additionally, pricing strategy plays a crucial role in attracting customers and generating revenue. It is important to establish a regular schedule for reviewing and revising the pricing plan to ensure that it remains relevant, competitive, and aligned with the business objectives. In summary, pricing strategy is essential in designing customer-centric applications as it influences the overall success and profitability of the app.

Building Blocks

Before diving into code or tinkering with metadata, let’s ensure you’re well-versed with the tools at your disposal and the necessary criteria your app needs to meet.

ISVs boast an array of distinct technologies and methodologies, encompassing managed packages, Dynamic Apex, Flow templates, custom property editors, and so much more. It’s crucial to acquaint yourself with these nuances.

If you aim to have your app interface with external platforms, remember there are specific security standards for ISVs to adhere to. Not to mention, prior to your app’s debut, it must clear a security review. Gaining insights into this procedure from the get-go can steer you clear of routine blunders.

If you don’t know where you are going, you’ll end up someplace else. Yogi Berra

Your goal at this stage? To craft an app that not only sails through the security review but also capitalizes on the full potential of the available tools.

Delivering Value

I hate to break it to you, but just because your app passed the security review doesn’t mean you’re about to strike gold. Yes, it’s a significant milestone, but there’s more to the journey.

Firstly, you’ll need to list it on the AppExchange. This involves crafting the right listing, creating a compelling demo, and possibly setting up a trial solution using tools like Trialforce or Test Drive.

Consider the user experience when installing your application. To streamline this process, think of your customer’s system administrator as a key user persona. Aim to automate as much of the installation process as possible and provide clear documentation for any manual steps involved.

Moreover, it’s time to strategize on release management: How will you roll out new versions of your app to your users? And once they begin paying, remember that a portion of your revenue will go to Salesforce. This means you’ll need to choose between two transaction tools – the Channel Order App (COA) or Checkout.

Scaling for Success

Scaling your product is a lot like planning an expedition up Everest, minus the frostbite and, you know, the physical exertion.

The climb starts with a burst of adrenaline. You’re excited, fueled by dreams of summit selfies with your app. However, as any mountaineer (or founder) knows, the higher you climb, the trickier the terrain. Oxygen gets sparse, yaks start to look judgmental, and suddenly, you’re wondering why you didn’t opt for beach volleyball instead.

You don’t need to master all of this right from the start. However, if you’re aiming for significant success, getting acquainted with App Analytics is vital. App Analytics can give you insights into how users engage with your apps and features on the AppExchange platform and how potential customers interact with your AppExchange listing. This data helps you spot potential issues before users drop off, make informed choices about new features, and enhance the overall user experience.

Another crucial consideration is “technical debt”. This term is a metaphor used by software developers and IT experts to describe situations where necessary tasks are postponed during software development. This often results in quick fixes that might hinder future developments or compromise software stability.

It’s plausible that you accumulated some tech debt during your app’s early stages, which is perfectly okay. But as you look to expand your solution, it’s essential to understand how to manage this debt effectively. Remember the security review you passed? It wasn’t a one-off – Salesforce will periodically request re-submissions, so it’s wise to stay prepared.

If all this seems overwhelming, don’t fret! Plenty of individuals and entities are ready to assist. Make it a point to familiarize yourself with Salesforce personnel roles and external experts, such as PDO (Product Development Outsourcers) partners, who can guide you on your journey.

Where to Start?

Congratulations! You now have a roadmap of what you need to learn to turn your ideas into scalable and profitable Salesforce applications. So where can you gain this knowledge?

You could dive deep into Salesforce documentation and sign up for ISV-focused webinars. Alternatively, you can simplify your journey by picking up my new book, “Salesforce AppExchange Success Blueprint”. Within its pages, I delve into all these topics, ensuring you have a comprehensive guide to achieving success on the platform.

Great news! We’ve got an exclusive offer just for Salesforce Ben readers. You can get your hands on “Salesforce AppExchange Success Blueprint” with a 20% Amazon discount code. Simply use code 20JAKUB at checkout to access the book at a reduced price.

Note: The code is valid until 8 December 2023 and can only be redeemed on


The Author

Jakub Stefaniak

"Jakub is the best Salesforce Expert I know" - Jakub's Mom ☁️ CTA ☁️ Director of Engineering ☁️ Dreamforce & TrailblazerDX Speaker


    July 15, 2020 11:17 pm
    Thanks for the tips! Wondering if queue assignments are only at record creation? Or could it be when a certain criteria is met (ie: status is changed from stage 2 to stage 3)?
    Mira Shah
    July 16, 2020 11:16 pm
    You can create a multiple Lead Assignment Rules based on criteria you defined, but only one rule can be active at a time. You can create a multiple rule entries and sets the order in which the entry is processed in the rule, for example, 1, 2, 3. Probably, you can choose the stage and assign lead to the queue. Learn more about Assignment rule. See below help article. You can do it via process builder. See below help article. I hope it helps.
    Charles Thompson
    August 02, 2020 7:00 am
    Both this and the official help documentation don't go into any detail on how the email fields work. One field is "Queue email". It's clear what happens if you put a value here: that email address will receive notifications of new items in the queue (which is why you usually direct these emails to a mailbox that includes all users that have access to the queue, but the instructions don't mention that you'll need to set that up in an email system outside of Salesforce and that system will need to be manually synchronised with the members in the queue. ) The instructions & documentation don't say what happens when this field is blank. The second email field is a checkbox "Send email to members". What happens if you tick this box but leave the previous field blank? Does an email go out to each member individually, based on their user settings? Does that work if your members are Public Groups? The documentation doesn't say! And unfortunately this article skips this detail. I'd rather not go through the trouble of testing all the different scenarios. Do you know?
    Charles Thompson
    August 02, 2020 7:16 am
    I found the answer!  So here are the options.  Remember that there are two email fields: 1) Queue email - this is a text field that lets you insert an email address 2) Send email to members - this is a checkbox Here's what happens: A. If Queue email is blank and the item in the queue comes from a case assignment or escalation rule: an email will go out to each member of the queue based on their user settings, whether the checkbox is ticked or not. B. If Queue email has an email address: i) if the checkbox is ticked AND the item in the queue was sent via case assignment or escalation rules, then an email will go to that email address (which needs to be manually synced when the queue members change) ii) if the checkbox is unticked, no email will go out iii) if the item comes to the queue from any other method (such as Process Builder), there will be NO email sent -- you need to send one from your process
    Tim Collins
    August 04, 2020 7:16 pm
    Great tip and going to start playing with one. What about custom objects? I have one that would work perfectly with queues.
    Christine Marshall
    August 05, 2020 3:59 pm
    Hi Tim, Yes - Custom Objects can also have queues. Have fun! Christine
    Tim Collins
    August 05, 2020 6:45 pm
    Thank you so much Christine.
    August 12, 2020 4:07 pm
    This is great! However, in my company we have multiple Business Units, so one lead might need to be owned by multiple Sales Reps. How can I manage this? Thanks
    September 03, 2020 5:08 am
    Very good article. I have one query: is their anyway to run a Process Builder or Workflow when user is added in Queue?
    Andy Corbett
    November 12, 2020 11:24 am
    There is also an 'email' checkbox against every entry in the (Lead or Case) Assignment Rule! how does this interact with the above options I wonder?
    February 27, 2021 7:30 am
    Does anyone happen to know who is the 'sender' of the Queue email? Who does it come from?
    March 15, 2021 10:30 pm
    This is good .Can anyone tell why queues cannot be created for accounts ?
    Christine Marshall
    March 16, 2021 9:23 am
    You can vote for the idea here:
    Mahasin Daoud
    May 22, 2021 11:55 am
    Hi. Can queues be created from a Chatter Groups or Task/Activity/Event on an Opportunity? Current steps our reps currently have to take to submit a request for a quote from our Sales Support team. 1. Upload a file(s) to the Opportunity, 2. Send a chatter to a Sales Support Chatter Group with details around their ask to Sale Support 3. Sales Support receives the Chatter email with details and each individual responds to the chatter for the rep in the region they manage 4. Sales Support then builds the quote based on the details in the uploaded file and chatter details. Thank you!
    September 24, 2021 12:52 pm
    Hello, how can an individual user assign the lead to him to follow-up, i.e. I have John and Kathryn working on the leads of North-America. In your example, a lead with region North-America is assigned to that queue. John and Kathryn, 2 Salesforce Users are following up this queue. A first lead comes in. If John now assigns the lead to himself, this is actually not possible because as long as the region is North America, the lead will remain assigned to the queue.
    Christine Marshall
    October 04, 2021 9:20 am
    Hi Sabrina, I'm not sure I understand your issue here? Lead assignment rules run when a Lead is created. An assignment rule can add a Lead to a queue, but a User can then "Accept" the Lead or change the owner. Why would the owner remain as the queue if a User has reassigned the Lead?
    October 30, 2021 7:34 pm
    Hi, Is there any way to look for " All Cases that come to my queues and even though I assigned to a different user"? For example, my queue name is "ABC" and I have assigned the case to"XYZ". I still want to see "xyz" cases even though I changed the owner of that record. Thanks for the help!
    November 10, 2021 4:32 pm
    A record can have only one Owner. That Owner can be a Queue , or a User. If you want multiple users to have R/W access, but nobody else, and they are in different business units (and so, different places in the Role Hierarchy), you probably need to use Sharing Rules.
    November 10, 2021 4:46 pm
    Yes , you can do either of those, or, run a record-triggered Flow. The record that kicks off the automation would be a new "Group Member" record. That is a junction object that implements the many-to many relation between User and Group. You probably want to check that the Group's Type field is "Queue", else it will process new members of all the other types of Group. .
    November 10, 2021 4:50 pm
    Christine is correct. Lead Assignment rules run only once, on a new Lead record (unless one takes extreme measures using Apex), so later changes will not be undone by Lead Assignment rules.
    November 10, 2021 4:54 pm
    We use automation and a custom field to record the "original queue". Then one can filter a List View using that custom field. We use the field to re-queue Leads in some situations.
    Melisa Jones
    November 29, 2021 7:54 pm
    I need help finding the Queue IDs. Creating a report or something to show me where they live.
    Christine Marshall
    November 30, 2021 9:48 am
    In Setup, go to Users > Queues, then select the Queue you need the ID for. Once the Queue is open, you can find the ID in the web browser.
    December 01, 2021 3:11 am
    We use the Assignment rule to put the Leads into Regional Queues. But once the Sales Rep picks up the lead they want to change ownership into their User name so that no one else picks it up. But because of our Assignment rule ever time they change the Owner it goes back to the Queue. Is there a way to get this to work. I was thinking a Process builder so that when the Status changes to "in progress" the Owner could be updated but i need to assign to a specific user and i don''t know who will pick you the Lead
    Jana Seketova
    January 26, 2022 4:24 pm
    Hi all, very good recap of the queues, one question around that one. If the queue is used in approval process, in classic I was able to see directly the link in the queue, while in lightning it is a pure text so I can not with just a click see who is there. Can somebody confirm if this is the desired solution; if you have the same experience? There is one idea around similar topic - that is where salesforce support pointed me when I asked but not clear if those two things are connected. Would be helpful if anyone can answer that. The object where we are using the approval history and the queues is a custom object. Thanks a lot Jana
    Andreea D
    January 29, 2022 7:17 am
    Hello Jana, Thank you for going through the article and happy to hear you liked the recap. While your question is about easily viewing queue members, the article seems to refer to a different topic of queues not being displayed, hence I am not sure they're related in any way. I can confirm though that in Lightning the Queues are displayed as text on the record, while in Classic is a hyperlink you can click on to view the queue members. I have just quickly tested in a couple orgs for Leads and Cases, and it does seem this is still the expected behavior.
    Chris G
    March 31, 2022 7:23 pm
    Is there any way to document the last time a queue was used? I want to do some cleanup in our org.
    May 10, 2022 6:29 am
    Hi Charles, So does that mean if we Queue email has an email address then it is a must to tick the Send email to members checkbox so that an email is sent out to the Queue inbox only? Or is it enough if we just provide the Queue email address without ticking the Send email to members checkbox for the email to be sent to the Queue inbox only?
    May 10, 2022 7:03 am
    Hi Cristine, We have a queue on the Custom object. For the email notification when a record is assigned to this queue. Is it enough if we just provide an email address in the Queue email (text field) or do we need to also tick the 'Send email to members' checkbox? We want the email only to go to the queue inbox when a record is assigned to the queue, we do not want the email to go to all the members of the queue at this point in time. Thanks, Carrol
    August 15, 2022 7:12 am
    Thanks for the article. I'm playing with Queues in tasks. To give you some context. Most of our licences are so what I'm working on is not to assign Cases or Opportunities to a group/queue, but rather a client/contact task to a team for them to pick up the task. Setting up was fairly easy, but where I'm stuck is 1) how an individual picks up the task to work on it. How does that happen? 2) The group email isn't getting the email when a new task has been assigned to the queue 3) From a reporting perspective, I like that I can see the tasks assigned to queues, but there are limitations. How do I know who completed the task? Thanks again
    Andreea D
    August 27, 2022 10:34 pm
    Hello Mia! 1) The individual can go ahead and edit the Assigned To field on the task, then change the owner from the Queue to them. Alternatively, there could be a custom action created which would call a flow for example and improve the experience with a lower number of clicks. 2) My recommendation here is not to use the group email but rather check the "Send email to members" box within the Queue setup, and make sure the queue members are set accordingly. In this scenario, there shouldn't be a problem for the email notification to be sent / received. 3) First of all, you can create a validation rule and not allow for the Task to be completed as long as the owner is a queue. That way, the user will be forced to update the Task owner (to themselves) and then mark as complete. This way, you can suppose the Task Owner completed the task. Alternatively, of course you can set up an automation called by a custom action perhaps which marks the Task as complete and also changes the Task owner automatically to the user who triggered the action. Hope this helps!
    September 21, 2022 10:48 am
    Hi, I have a question. How users in that queue can claim ownership of those Leads? I mean they will pick up a record & change the owner or is there any other way (automatic)?
    Jeanne Vie Garciano
    September 28, 2022 11:14 pm
    I have a question regarding queues. Is it possible that the original case owner will still have visibility with the case that he created event if it is already assigned to a queue and the case owner is updated?
    Andreea D
    September 30, 2022 11:23 pm
    Hello Jeanne! It depends on more details such as that user's permissions, sharing settings etc. just to name a couple possible considerations when reviewing their level of access as it varies based on what you have going on in your org. For example, if a user who has the View All Data permission (not ideal) or View All permission on Cases (for the specific object) created a Case which has been assigned to a Queue now, they will still be able to view that Case, and all the others regardless of the owner being a queue.
    October 14, 2022 3:12 pm
    Can we assign access to a user to add and remove members to the queue?
    Andreea D
    October 24, 2022 4:54 pm
    Hello Nayyar! At this time, there isn't a simple permission to enable for non-admin users to manage queue membership, but maybe the workaround mentioned on the idea below works for you. Feel free to upvote the idea, hopefully the permission will become a possibility in the future.
    May 09, 2023 7:04 pm
    Hi. Does anyone now how to a a user to a queue once it has been created? I created a Cases queue years ago and now I want to add a user to it, but I don't see a new button or anything like that.
    Craig R.
    May 10, 2023 3:37 pm
    How do I add a user to a queue after the queue has already been created? I created the queue years ago but now that I go back in I cannot find a New User button.
    David S
    June 14, 2023 9:00 pm
    Setup > Quick Find > Search for Queues. Then select the queue you want to edit. When you click Edit and it'll allow you to add/remove users as needed.

Leave a Reply

24th - 27th November


50% off

all courses