Home Main category

Main category

Christian Thor
By and 3 others
16 articles

Sale Opportunity Forecasting

Sale Opportunity Forecast in Simply CRM Introduction The Sale Opportunity Forecast feature in Simply CRM is designed to help organizations manage and predict current and future sales opportunities. This tool provides insights into your company’s overall sales pipeline, allowing you to view opportunities by team, individual users, and specific stages. It also supports advanced configurations like financial year settings, targets, and opportunity type mappings for more accurate forecasting. Features of the Sale Opportunity Forecast Forecast Hierarchy Simply CRM's forecast allows you to configure teams and users hierarchically, making it easier to manage forecasting across different levels of the organization. The hierarchy visualization includes: - Administrator: Shown at the top with all users as subordinates. - Vertical Connection: Displays users at the same level. - Horizontal Connection: Indicates senior-subordinate relationships. - Authorization Levels: Darker blue boxes indicate higher authorization, while lighter blue boxes represent lower authorization. You can easily add subordinates by hovering over a user and clicking the "+" button, or remove users with the delete button. FY (Financial Year) Configuration The forecast includes customizable Financial Year (FY) Configuration options: - Period: Choose between monthly or quarterly periods. - Number of Periods: Set the number of periods in your financial year. - FY Start Date: Define the start date for the financial year to align forecasts with your fiscal periods. Sales Stage Mapping This feature allows you to map each sales stage to a broader category (e.g., Pipeline, Best Case, Committed, Closed). This helps ensure accurate reporting by categorizing opportunities consistently across your teams. Opportunity Type Mapping Similar to sales stage mapping, opportunity type mapping allows you to categorize opportunities (e.g., New Business, Resale). This categorization improves forecasting accuracy and reporting clarity. Targets You can assign targets for each financial year per sales representative or team. These targets can be based on opportunity type or other custom criteria. To adjust a target, simply click on the value, type in the new amount, and click anywhere on the screen to save. Understanding the Forecast Report The Forecast Report is where users and managers can view the forecast data in detail. Here’s how it works: - View Forecast: Clicking this button opens the forecast report. - User and Sales Team List: Located in the left sidebar, this displays a list of users and their teams. - Sort by User: Clicking on a user reveals a "speedometer" style graph and their progress. - Sort by Period: The period dropdown allows you to sort the report by the financial periods (e.g., months or quarters) configured during setup. Under the Best Case Chart, you'll find a list view of opportunities, which can be expanded to show details by sales stage or user. You can also sort the opportunities by periods, users, or teams to get a clear overview of the forecast. Conclusion The Sale Opportunity Forecast in Simply CRM provides an intuitive and powerful tool for managing and predicting sales performance. By configuring financial periods, sales stages, and opportunity types, you can generate accurate forecasts that help teams stay on track with their targets. For more information or assistance with setting up your forecast, please reach out to our support team.

Last updated on Sep 22, 2024

Introduction to Webhooks

An introduction to Simply CRM Webhooks Webhooks in Simply CRM let you send or receive information automatically when things happen—like a little messenger running between Simply CRM and your favorite apps. Whether it’s sending information out (outgoing) or receiving it (incoming), webhooks make your life easier by automating things you’d normally have to do manually. If you're already familiar with how webhooks work, feel free to jump straight to how to set up incoming webhooks or outgoing webhooks. Here’s what we’ll cover: - What webhooks are (in a way that makes sense). - Where to find webhook settings in Simply CRM. - How to test your webhooks without the frustration. - Security and authentication. - Understanding the data format (JSON). What Are Webhooks? Webhooks are like smart notifications that automatically send or receive information when something important happens. It’s like getting an automatic email whenever something changes—but instead of a person sending it, it’s Simply CRM telling another system, or receiving a message from another system. Examples: - Outgoing Webhook: When a deal in Simply CRM is updated, an outgoing webhook can instantly send that information to your accounting software. You don’t need to lift a finger. - Incoming Webhook: When someone signs up on your website, their information can be sent straight to Simply CRM, creating a new contact automatically. Where to Find Webhooks in Simply CRM You can set up webhooks in two places: 1. Incoming Webhooks: These receive data from external systems. Head over to Settings > Webhooks > Incoming to set them up. This is great when you want Simply CRM to take in new data from other services (like new signups from your website). 2. Outgoing Webhooks: These are part of workflows, so you can trigger them when something happens inside Simply CRM (like when a deal is updated). Go to Settings > Automation > Workflows and choose the action "Send Webhook." Testing Your Webhooks Testing is a smart move to make sure your webhooks are doing what they’re supposed to do. Here’s how you can test both incoming and outgoing webhooks without too much hassle: Using Postman Postman lets you simulate how your webhook will send or receive data. It’s great for testing outgoing webhooks from Simply CRM, but you can also use it to simulate incoming webhooks. 1. Download Postman (Yay! It's free!). 2. Create a new request in Postman. 3. Set the request method to POST. 4. For outgoing webhooks, enter the external service’s URL that will receive the data. - Add your test data (like a sample deal update or contact creation). - Click send and check the external service to see if it got the data. 5. For incoming webhooks, you’ll do the reverse—enter Simply CRM’s webhook URL in Postman. - Add some sample data (like a new signup), and check if it creates a new contact in Simply CRM. 6. You can learn more about using Postman here. Using webhook.site Webhook.site is another super handy tool that makes it easy to receive and inspect webhook data. This is especially helpful for testing outgoing webhooks to see exactly what Simply CRM is sending. 1. Go to webhook.site and grab your unique URL. 2. For outgoing webhooks, paste this URL into your Simply CRM webhook settings as the destination. - When the webhook triggers, you’ll see the data appear instantly on webhook.site’s dashboard. 3. For incoming webhooks, you can use webhook.site to simulate the service that sends data to Simply CRM. - Grab your incoming webhook URL from Simply CRM and trigger the event on webhook.site to see what your system receives. 4. You can explore more about webhook.site here. Security (Authentication) Let’s talk security—because you don’t want just anyone messing with your webhooks. Simply CRM offers a couple of simple ways to keep things secure: - Basic Auth: Think of it like logging into a website with a username and password. You’ll provide these, and Simply CRM will send them with the webhook to prove it’s coming from you. - API Tokens: This works like a secret password hidden in the URL. Add the token to your webhook URL, and it verifies that the request is legit. Understanding the Data Format (JSON) Webhooks in Simply CRM use JSON (JavaScript Object Notation) to send or receive information. Don’t worry—it’s not as scary as it sounds. JSON is just a way to organize the data so that it’s clear and readable by both systems. Here’s an example of the type of data Simply CRM might receive when someone signs up on your website: jsonKopier kode{ "event": "new.signup", "data": { "email": "newuser@example.com", "name": "New User", "signup_date": "2024-10-23" } } In this case, Simply CRM would receive details about a new signup: their email, name, and the date they signed up. Conclusion Webhooks are a simple yet powerful way to automate tasks and make your systems work together. Whether you’re sending or receiving data, webhooks make things easier by doing it automatically—so you don’t have to. Make sure to test them using tools like Postman or webhook.site, and set up proper security to keep things running smoothly. For more specific guides on setting up webhooks, check out these articles: - Incoming Webhooks - Outgoing Webhooks

Last updated on Oct 24, 2024

Incoming Webhooks

Simply CRM Incoming Webhooks Welcome to the guide for setting up Incoming Webhooks in Simply CRM. If you haven’t already checked out our introduction to webhooks or are curious about outgoing webhooks, feel free to give them a quick read first to get a fuller picture of how Simply CRM uses webhooks to send and receive data. We also have a slightly more elaborate guide on How to Create and Manage Incoming Webhooks if you need this. Incoming webhooks allow Simply CRM to receive data from external systems or applications, automatically creating or updating records without any manual input. How to Set Up Incoming Webhooks Here’s how you can set up incoming webhooks in Simply CRM: 1. Go to Settings: Navigate to Settings > Webhooks > Incoming to manage your incoming webhooks. 2. Create a New Webhook: Click on the button to create a new webhook. 3. Fill Out the Webhook Details: When setting up the webhook, you'll be prompted to complete the following fields: - Webhook Name: Choose a name to identify your webhook. - Module Name: Select the Simply CRM module where the incoming data will be recorded (e.g., Contacts, Deals). - Is Active: Choose whether the webhook should be active or paused. - Mandatory Fields: Specify which fields must be filled to create or update a record. Fields marked in red are required. 4. Configure the Data Fields: After selecting your module, define which fields the webhook will populate from the incoming data. For each field, you can choose: - VALUE: A fixed value to be used for this field. - FIELD: Pull the value directly from the incoming data (JSON). Testing Your Incoming Webhooks To make sure everything’s set up correctly, it's important to test your incoming webhooks. You can use tools like Postman or webhook.site to simulate and inspect the incoming data: - Postman: Create a POST request to simulate sending data to your webhook. Enter the Simply CRM webhook URL, add your test data in JSON format, and send the request. This helps you check whether your webhook is receiving and processing data as expected. - webhook.site: Use webhook.site to inspect the data your webhook receives. Simply trigger an event from your external system, and webhook.site will display the incoming data for you to verify. Both tools are easy to use, and we’ve mentioned them in our general webhooks guide, so feel free to check that out for more details. JSON Format for Incoming Webhooks The data sent to Simply CRM via incoming webhooks is structured in JSON format. This ensures that the information is well-organized and can be processed by Simply CRM. Here’s an example of a typical JSON payload: jsonKopier kode{ "event": "new.contact", "data": { "name": "John Doe", "email": "johndoe@example.com", "phone": "123456789" } } This example shows how a new contact’s information (name, email, phone) could be sent to Simply CRM, where the system would create a new record based on the incoming data. Conclusion Incoming webhooks are a powerful way to streamline data entry in Simply CRM. By automatically pulling in data from external systems, you can save time and reduce manual work. Whether you’re receiving new signups, updates from other platforms, or any other data, incoming webhooks keep your CRM up-to-date. Be sure to also check out our guides on outgoing webhooks and the general introduction to webhooks to explore more ways to automate and integrate Simply CRM into your workflows.

Last updated on Oct 23, 2024

Outgoing Webhooks

Outgoing webhooks in Simply CRM let you send data to, or retrieve data from, an external system automatically when a workflow is triggered. This is useful when you want to: - send CRM data to another system - fetch data from an external API - use the response from an external system to create or update records in Simply CRM If you are new to webhooks, these related articles are also useful: - Introduction to Webhooks - Incoming Webhooks - Outgoing Webhooks Where to find it Go to: Settings > Automation > Workflows Create or edit a workflow, and in the Actions section choose Add WebHook. If you need more background on workflows and webhook basics, see: - Introduction to Webhooks - Outgoing Webhooks Main webhook settings When adding an outgoing webhook, you can configure the following. Action Title An internal name for the webhook action. Description An optional internal description of what the webhook does. URL to Notify This is the external endpoint that Simply CRM will call. Example: https://api.example.com/offers You can also include query parameters directly in the URL. HTTP method Choose the method that should be used for the request, for example: - GET - POST The correct method depends on what the external system expects. Authorization Type You can choose how the request should be authenticated: - Basic Authentication - No Authentication - Token - Bearer Token Use the type required by the receiving API. Request Type This controls how the data is sent. A common option is: - query — sends data as query parameters Use the request type required by the external system. Key / Value fields You can add as many key/value rows as needed. - Key = the parameter name - Value = the value to send - Header Field = if checked, the key/value pair is sent as a request header instead of normal request data This can be used for: - fixed values - CRM field values - credentials - API keys - custom parameters required by the external API Important behavior when selecting fields from dropdowns When you select a field from a dropdown, * is appended automatically. This means the workflow will search values in the database dynamically. If you type the field name manually instead of selecting it from the dropdown, it will not be overwritten automatically. You can also manually enter your own custom parameter names. Using predefined variables You can use predefined variables in the webhook configuration. This works in: - the URL - the Value fields - credentials such as username, password, token, API key, and similar fields Examples: - $$global_wordpress_url$$ - $$global_api_username$$ - $$global_api_key$$ - $$global_magento_apikey$$ These values are defined centrally under: Admin > Predefined Settings This is useful when: - the same integration is used in multiple workflows - credentials or base URLs should be maintained in one place - you want to avoid hardcoding sensitive values into every workflow Example Instead of writing: https://my-wordpress-site.com/wp-json/custom-endpoint you can write: $$global_wordpress_url$$/wp-json/custom-endpoint If the predefined setting is updated later, workflows using it will automatically use the new value. Example: storing a temporary API token in a global value A predefined value can also be filled from a webhook response and then reused in other webhook calls. Example: $$global_magento_apikey$$ This is useful when an external system requires a temporary token that only stays valid for a limited time, for example 1 hour. Example setup You could create a workflow with a timed trigger that runs every 45 minutes. That workflow could contain a webhook that: 1. logs in to Magento 2. retrieves a valid API token 3. saves that returned token into the predefined setting global_magento_apikey Other workflows can then use: $$global_magento_apikey$$ in their headers, URL values, or other webhook parameters. This allows you to centralize token handling and reuse the latest valid token across multiple webhook actions. Using date variables You can also use dynamic date variables in the webhook. Examples: - $$get_date('today')$$ - $$get_date('yesterday')$$ These return dynamic date values when the workflow runs. This is useful when the external API expects a date filter in the request, for example: - fetch records from today - fetch records from yesterday - limit returned data based on a date Example https://api.example.com/orders?date=$$get_date('today')$$ Or as a value: - Key: from_date - Value: $$get_date('yesterday')$$ Skip duplicates by saving and comparing past response This option allows the webhook action to compare the newest response with the previous response. When enabled: 1. Simply CRM saves the latest webhook response 2. on the next run, the new response is compared with the previously saved response 3. if the response is identical to the last saved response, the action is skipped This is useful when the webhook is used to regularly fetch data from an external system, but you only want Simply CRM to continue processing when the returned data has actually changed. Typical use cases - polling an external API on a schedule - avoiding repeated creation of identical data - reducing unnecessary updates when the external result has not changed Important note This compares the full latest response against the previously saved response. If the response is unchanged, the webhook step is skipped. Handle Response The Handle Response section is used when you want to take values from the webhook response and save them into fields in Simply CRM. For each row: - choose the destination CRM field on the left - define the source value from the webhook response on the right Example response [ { "title": "Example Deal", "price": 2500, "customer_no": "CUST-1001", "created_on": "2025-03-01", "end_date": "2025-03-31" } ] Example mapping - potentialname -> [*].title - amount -> [*].price - customer_no -> [*].customer_no - createdtime -> [*].created_on - closingdate -> [*].end_date In this example, [*] means the response contains multiple records and that the mapping should use values from all returned items. Extracting values from the response You can extract values from the response using path expressions. Multiple records Use: [*].customer_no if you want the customer_no value from all returned records. This is typically used when the response contains many records and you want Simply CRM to create or update multiple CRM records based on the returned data. First record only Use: [0].customer_no if you only want the value from the first record in the response. This is useful when you only want to process the first returned item. Nested arrays You can also extract values from nested arrays. Example: items.[*].quantity This means: - go into the items array - retrieve the quantity value from all records inside that array You can use similar structures for other nested response formats. Examples: - items.[*].sku - items.[*].name - data.[0].customer_no - response.items.[*].quantity Nested object example If the webhook response contains nested JSON objects, you can access sub-values using dot notation. Example: { "statistics": { "counts": { "all": 7380, "closed": 6954, "opened": 426 } } } To get the value 426, use: statistics.counts.opened in the Handle Response source field. Record Matching The Record Matching dropdown allows you to define how Simply CRM should identify whether a returned record already exists. Here you choose an existing field in Simply CRM that should act as the unique identifier. Typical examples: - record number - email address - external ID - customer number - order number How it works When the webhook response is processed: 1. Simply CRM reads the value from the mapped field in Handle Response 2. it checks whether a record already exists with the same value in the field selected under Record Matching 3. if a match is found, the existing record is updated 4. if no match is found, a new record is created Important requirement For Record Matching to work, the matching value must also be filled in Handle Response. That means you must first map the response value to a CRM field in Handle Response, and then select that same field in Record Matching. If the value is not mapped in Handle Response, Simply CRM has nothing to compare against and cannot match existing records. Example If the response contains: [ { "customer_no": "CUST-1001", "title": "Example Deal", "price": 2500 } ] You could map: - customer_no -> [*].customer_no - potentialname -> [*].title - amount -> [*].price Then choose customer_no in Record Matching. Result: - if a record already exists with customer_no = CUST-1001, that record is updated - if no record with that customer number exists, a new record is created This is especially useful when syncing data from external systems without creating duplicates. Example setup Below is a typical example of an outgoing webhook used to fetch records from an external API and create or update CRM records. URL $$global_external_api_url$$/offers Authentication / header values Examples: - Username -> $$global_api_username$$ - Password -> $$global_api_password$$ - APIKey -> $$global_api_key$$ If these should be sent as headers, enable Header Field on those rows. Duplicate checking Enable Skip duplicates by saving and comparing past response if you only want processing to continue when the response changes. Handle Response example - potentialname -> [*].title - amount -> [*].price - customer_no -> [*].customer_no - createdtime -> [*].created_on - closingdate -> [*].end_date Record Matching example Choose a unique field such as: - customer number - email - order number - external ID If a returned record matches an existing value in that field, the existing record is updated instead of creating a new one. Testing and troubleshooting When testing outgoing webhooks, check: - that the URL is correct - that the authentication type matches the external API - that required headers are marked as Header Field - that the response structure matches your Handle Response mappings - that the matching field in Record Matching is also mapped in Handle Response For testing, tools like Postman and webhook.site are useful. The current webhooks overview article also recommends those tools. (help.simply-crm.com) If records are not being updated as expected: - verify that the returned value really exists in the webhook response - verify that the target CRM field is mapped correctly - verify that the selected Record Matching field contains the same value in existing records If no new data is being processed: - check whether Skip duplicates by saving and comparing past response is enabled - if enabled, the response may be identical to the previous run and therefore intentionally skipped Related articles - Introduction to Webhooks - Incoming Webhooks - Outgoing Webhooks -

Last updated on Mar 11, 2026

Simply CRM Facebook Leads Integration Terms of Service

Welcome to the Simply CRM Facebook Leads Integration. These Terms of Service ("Terms") govern your use of the Simply CRM Facebook Leads Integration ("Integration"), a feature that enables users to automatically sync leads collected via Facebook Lead Ads to their Simply CRM account. By using the Integration, you agree to comply with and be bound by these Terms. If you do not agree to these Terms, you may not use the Integration. 1. Service Description The Simply CRM Facebook Leads Integration allows paying Simply CRM users to automatically synchronize leads generated from Facebook Lead Ads into their respective Simply CRM accounts. The Integration is offered as a feature of the Simply CRM platform and is available at no additional charge to our existing CRM customers. 2. Eligibility To use the Integration, you must: - Be a paying user of Simply CRM. - Have an active Simply CRM account. - Have an active Facebook account with access to Facebook Lead Ads. - Provide the necessary permissions for the integration to access and sync lead data from your Facebook Lead Ads. 3. Data Collection and Use By using the Integration, you authorize Simply CRM to collect lead data from your Facebook Lead Ads and automatically transfer it into your Simply CRM account. The data collected will include, but is not limited to: - Lead contact information (name, email, phone number, etc.). - Any other data collected via your Facebook Lead Ads. Simply CRM will store and process this data solely for the purpose of providing the integration service. We will not share or sell this data to third parties. Your use of the Integration is subject to our Privacy Policy. 4. User Responsibilities You are responsible for: - Ensuring that your Facebook account and Facebook Lead Ads comply with Facebook's policies and applicable laws. - Managing and securing access to your Simply CRM and Facebook accounts. - Providing accurate and complete information when setting up the Integration. Simply CRM is not responsible for any errors or issues caused by incorrect setup, user error, or non-compliance with Facebook's advertising guidelines. 5. No Additional Fees The Facebook Leads Integration is provided as a free feature to active Simply CRM customers. There are no additional fees for using the Integration. However, Simply CRM reserves the right to introduce new features or premium services in the future that may incur additional costs. 6. Limitations and Availability Simply CRM will make reasonable efforts to ensure the Integration is available and functioning. However, we do not guarantee: - Continuous, uninterrupted, or error-free operation of the Integration. - Compatibility with all Facebook features or future updates to Facebook’s platform. Simply CRM reserves the right to modify, suspend, or discontinue the Integration at any time without prior notice. 7. Termination Simply CRM may terminate or suspend your access to the Integration without notice if: - You violate these Terms. - You fail to comply with Facebook's terms or Simply CRM’s terms. - Your Simply CRM account is inactive or canceled. Upon termination, your ability to use the Integration will cease immediately. 8. Liability Simply CRM is not liable for: - Any indirect, incidental, special, or consequential damages that may result from the use of the Integration. - Any loss of data or leads due to errors, network issues, or third-party service disruptions (e.g., Facebook outages). You agree to use the Integration at your own risk and acknowledge that Simply CRM provides the service on an "as-is" basis without warranties of any kind. 9. Changes to Terms Simply CRM reserves the right to modify these Terms at any time. Changes will be posted on this page, and your continued use of the Integration after the effective date of the updated Terms constitutes acceptance of the modified Terms. 10. Contact Information If you have any questions about these Terms or the Simply CRM Facebook Leads Integration, please contact us at support@simply-crm.com By using the Simply CRM Facebook Leads Integration, you acknowledge that you have read, understood, and agreed to these Terms of Service.

Last updated on Nov 04, 2024

What Are Product Bundles in Simply CRM?

Product bundles in Simply CRM allow you to group multiple products or services together and sell them as a single package. This is especially useful when you regularly offer a set of products together—for example, a starter kit, service packages, or a hardware + support combo. Each bundle includes: - A parent product (the bundle itself) - One or more child products (the items included in the bundle) This feature helps streamline your sales process, simplify invoicing, and provide clear visibility into what’s included in each offer. Benefits of Using Product Bundles - Sell multiple items as a single unit - Save time on data entry - Apply discounts to the full package or individual items - Ensure consistent pricing and product combinations - Improve reporting on bundled offers How to Create a Product Bundle in Simply CRM Follow these steps to create a new product bundle: 1. Navigate to the Products module Go to Inventory > Products in the main menu. 2. Create or edit the parent product This will be the bundle that contains the grouped items. Click Add Product or open an existing one. 3. Scroll to the ‘Bundle Items’ section Find the section labeled Product Bundles or Sub Products (depending on your version). 4. Add child products Click Add Product Line and select the individual products you want to include. Specify quantity and price if needed. 5. Save the product Once your bundle is set up, click Save. You can now use this bundle in Quotes, Invoices, Sales Orders, and more. How to Use Product Bundles in Sales Documents When creating a new Quote, Invoice, or Sales Order: 1. Add the bundle product to the item list. 2. The child products will be automatically listed below. 3. You can adjust quantities or apply discounts as needed. 4. Save and send the document like usual. Tips and Best Practices - Use clear names for bundle products so your team and customers know what’s included. - If pricing needs to be adjusted frequently, consider setting bundle prices dynamically based on the child products. - Use descriptions in the bundle to explain what’s included in simple terms for the customer. If you have any questions about using product bundles in Simply CRM, don’t hesitate to contact our support team.

Last updated on Mar 28, 2025

Guide to Meeting Scheduler

You can find this feature in your CRM under: Settings → Other Settings → Meeting Scheduler Setup 🔧 Setting up a new schedule 1. Create a new schedule - Click "Add User" to start the setup. 2. Fill in basic information - Subject: The meeting name or type (e.g. Demo, Support, Consultation). - Description: A short text explaining what the meeting is about. - Location: Where the meeting will take place (e.g. “Teams link” or “I will call you on your phone number”). 3. Choose meeting length - You can allow multiple durations: 15, 30, 45, or 60 minutes. - The person booking will select one of these. 4. Select user(s) - Add the CRM user who should be bookable (e.g. simplysupport). - If Check User Existence is enabled, the system validates that the user actually exists in CRM. 5. Workdays - Select the weekdays when meetings can be booked (e.g. Monday–Friday). 6. Workhours - Set available hours for booking (e.g. 09:00 – 17:00). 7. TimeZone - Choose the timezone for this schedule (e.g. Europe/Brussels). - On the booking page, the time will automatically adjust to the visitor’s local timezone. 8. Minimum notice - Define how far in advance a meeting can be booked (e.g. 0 minutes = immediate booking allowed). 9. Name and email (when adding a new user) - If you want to add a new CRM user, enter their name and email here. 📋 Overview of configured schedules Once created, schedules will appear in the table below: - Users: Which CRM user(s) can be booked - Subject, Location, Description: Information shown to the person booking - Workdays & Workhours: Available booking days and times - TimeZone: Timezone for this schedule - Minimum Notice: Shortest allowed booking notice - Length of Meeting: The durations available (15, 30, 45, 60 min) - Copy URL: Shareable link to the public booking page - Edit: Adjust the configuration - Delete: Remove a schedule 🌍 Booking – what the customer sees When you share the Copy URL, the customer will see a booking page like in your screenshot: 1. They choose the meeting length (15, 30, 45, or 60 minutes). 2. They pick an available date and time from the calendar. 3. They see your subject, description, and location (e.g. “I will call you on your phone number”). 4. The booking is saved in the system. ✅ Summary - Set up users with availability, meeting lengths, and timezones. - Share the booking link (Copy URL) with customers or partners. - Customers can book meetings directly in your schedule based on your defined settings.

Last updated on Oct 01, 2025

Connect Microsoft Business Central to Simply CRM

Connect Microsoft Business Central to Simply CRM This guide shows you how to connect Microsoft Dynamics 365 Business Central with Simply CRM, so data can be synced and used in your CRM. You will set up an app in Azure, give it the right permissions, and connect it to Simply CRM. What you need before you start Make sure you have: - An active Microsoft Dynamics 365 Business Central account - Access to Azure Active Directory (Microsoft Entra ID) - A custom domain that is validated in Azure - Admin access to your Microsoft tenant (to approve permissions) Step 1: Validate your domain in Azure Your domain must be validated before Microsoft allows API access. - Go to Azure / Entra ID - Add and validate your custom domain using DNS - Confirm that: - The domain shows as verified - You can log in to the Microsoft 365 admin center with this domain Step 2: Create an app in Azure You need to create an application that Simply CRM can use to access Business Central. - Go to Azure Portal → App registrations - Create a new application - Set a Web redirect URL to: - https://sai.simplyhq.com/bc365_auth.php - After creating the app: - Copy the Tenant ID - Copy the Client ID - Create a Client Secret - Save the secret value (you will not be able to see it again) Step 3: Add API permissions Your app must have access to Business Central. In your Azure app: - Go to API permissions - Add permissions for Dynamics 365 Business Central - Make sure these permissions are added: - app_access (Application) - Automation.ReadWrite.All (Application) - user_impersonation (Delegated) - Also add: - Microsoft Graph → User.Read (Delegated) Then: - Click Grant admin consent - Confirm that the status shows as Granted Step 4: Enter credentials in Simply CRM In Simply CRM: - Go to the Business Central integration settings - Enter: - Tenant ID - Client ID - Client Secret value - Click Log in to BusinessCentral365 You will be redirected to Microsoft to approve access. Step 5: Confirm the connection After you are redirected back to Simply CRM: - The Business Central integration status should turn green - If it is red, the connection failed Troubleshooting (if it does not work) If the connection fails, check: - The domain is fully validated in Azure - The Client Secret is correct and not expired - Admin consent was granted for all permissions - The redirect URL matches exactly - You are logging in with a Microsoft admin user Next steps Once connected, you can start syncing data between Business Central and Simply CRM. If you need help with what data is synced or how to use it in Simply CRM, see the related integration guides in the helpdesk.

Last updated on Feb 23, 2026

Sales Opportunity Forecast

Overview The Sales Opportunity Forecast module in Simply CRM helps you project expected revenue based on open sales opportunities. It provides visibility into pipeline value, weighted forecasts, and expected closing performance. Use it to: - Track revenue targets - Review projected income - Monitor pipeline health - Support cash-flow planning How Forecasting Works The forecast is calculated from your Opportunities (Deals) using: - Sales Stage - Amount - Probability - Expected Close Date Weighted Forecast Formula Forecast Amount = Opportunity Amount × Probability (%) Example: - Deal Value: $10,000 - Probability: 60% - Forecast Contribution: $6,000 Key Features 1) Forecast by Time Period View expected revenue by: - Month - Quarter - Year - Custom date range 2) Forecast by Sales Rep Analyze projected revenue by individual users for: - Performance reviews - Target tracking - Coaching and performance management 3) Forecast by Sales Stage See how projected revenue is distributed across your pipeline stages (e.g., Prospecting, Proposal, Negotiation, Closed Won) to identify bottlenecks. 4) Probability-Based Projections The module calculates weighted revenue using probability values assigned to each sales stage. To adjust stage probabilities: - Settings → Sales Stages How to Use the Module Step 1: Confirm Opportunity Data For accurate forecasting, ensure each opportunity includes: - Amount - Sales Stage - Probability - Expected Close Date Step 2: Open the Module Navigate to: - Sales → Sales Opportunity Forecast Step 3: Apply Filters Filter results by: - Date range - Sales rep - Sales stage - Team Step 4: Review Results The module displays: - Total pipeline value - Weighted forecast total - Number of opportunities - Breakdown by stage and/or user Best Practices - Keep probabilities realistic - Update close dates regularly - Re-stage or close stalled opportunities - Review forecasts weekly - Align stage probabilities with historical performance Common Use Cases Revenue Planning Estimate upcoming revenue for budgeting and financial planning. Sales Performance Tracking Compare forecasted revenue against actual closed revenue. Cash-Flow Prediction Anticipate income based on expected close dates. Executive Reporting Provide leadership with a clear snapshot of projected revenue and pipeline health. Troubleshooting Forecast Numbers Look Incorrect Check: - Are probabilities assigned to all sales stages? - Are opportunity amounts completed? - Are expected close dates accurate? - Are filters excluding relevant records? Forecast Is Lower Than Expected Common causes: - Opportunities concentrated in low-probability stages - Missing close dates - Early-stage heavy pipeline - Narrow date filters applied Summary The Sales Opportunity Forecast module in Simply CRM provides probability-weighted visibility into future revenue. Maintaining accurate opportunity data and realistic stage probabilities ensures reliable forecasting and stronger sales planning.

Last updated on Mar 02, 2026

Simply CRM Workflow Action Expressions Guide

This guide explains the workflow expressions available in Simply CRM for Update fields and related workflow actions that use the same expression engine. It includes: - supported expression syntax - available functions - practical examples - important usage notes What these expressions are used for Workflow expressions let a workflow calculate, transform, or retrieve values when it runs. Typical uses include: - filling a field from other fields - combining text values - calculating dates - formatting text - applying conditions - reading related-record values - working with JSON data in advanced workflows Basic syntax rules Strings use single quotes Use: 'Open' Not: "Open" Fields can be referenced directly Example: firstname Expressions can be combined Example: concat(firstname, ' ', lastname) Arithmetic and comparisons are supported Examples: amount + 100 quantity * unit_price amount >= 5000 Conditional logic is supported Syntax: if condition then value_if_true else value_if_false end Example: if amount > 1000 then 'Large deal' else 'Standard deal' end Fields from related records can be read directly Syntax: (reference_field : (Module) fieldname) Example: (account_id : (Accounts) phone) This reads the phone field from the related Account record referenced by account_id. Common examples Use a field value directly firstname Returns the value of firstname. Build a full name concat(firstname, ' ', lastname) Example result: John Smith Categorize a record by amount if amount > 1000 then 'Large deal' else 'Standard deal' end Read a related record field (account_id : (Accounts) phone) Returns the related Account phone number. Supported functions 1. substring(string, start, end) Returns part of a string. Example substring(subject, 0, 10) Returns the first 10 characters of subject. Example substring(accountname, 3, 8) Returns characters from position 3 to 8. Note If used with only 2 parameters, it returns the text from the start position to the end of the string. 2. preg_replace_str_only(pattern, replacement, subject) Performs a regex replacement on a string. Example preg_replace_str_only('/[^0-9]/', '', phone) Removes all non-numeric characters from a phone number. Example result If phone is: +49 (123) 456-789 Result: 49123456789 3. split(string, separator, index) Splits a string and returns one part. Example split(email, '@', 0) Returns the part before @. Example split(email, '@', 1) Returns the domain part of the email. Example result If email is: john@example.com Then: split(email, '@', 0) returns: john and: split(email, '@', 1) returns: example.com 4. concat(a, b, ...) Joins multiple values together. Example concat(firstname, ' ', lastname) Result: John Smith Example concat('INV-', invoice_no) Result: INV-100045 Note This function can accept more than two values. Example: concat(firstname, ' ', lastname, ' - ', email) 5. time_diff(a, b) Returns the difference between two date/time values. Example time_diff(closingdate, createdtime) Returns the time difference between closingdate and createdtime. 6. time_diff(a) Returns the difference between the current date/time and the provided value. Example time_diff(duedate) Useful in advanced date/time calculations. 7. time_diffdays(a, b) Returns the difference in days between two date/time values. Example time_diffdays(closingdate, createdtime) Returns the number of days between the two dates. 8. time_diffdays(a) Returns the number of days between now and the provided value. Example time_diffdays(duedate) Useful for overdue or remaining-days logic. 9. add_days(datefield, noofdays) Adds days to a date. Example add_days(closingdate, 7) Returns a date 7 days after closingdate. Example add_days(30) Returns a date 30 days from today. Common use Set a due date 14 days from today: add_days(14) 10. sub_days(datefield, noofdays) Subtracts days from a date. Example sub_days(closingdate, 3) Returns a date 3 days before closingdate. Example sub_days(10) Returns the date 10 days before today. 11. add_months(datefield, noofmonths) Adds months to a date. Example add_months(start_date, 1) Returns a date 1 month after start_date. Example add_months(contract_start_date, 12) Returns the anniversary date one year later. 12. sub_months(datefield, noofmonths) Subtracts months from a date. Example sub_months(contract_end_date, 2) Returns a date 2 months before contract_end_date. 13. get_date('today') Returns today’s date. Example get_date('today') 14. get_date('tomorrow') Returns tomorrow’s date. Example get_date('tomorrow') 15. get_date('yesterday') Returns yesterday’s date. Example get_date('yesterday') Common use Set a field to the current date: get_date('today') 16. add_time(timefield, minutes) Adds minutes to a time value. Example add_time(time_start, 30) Returns a time 30 minutes after time_start. Example add_time(15) Returns the current time plus 15 minutes. 17. sub_time(timefield, minutes) Subtracts minutes from a time value. Example sub_time(time_end, 45) Returns a time 45 minutes before time_end. 18. power(base, exponential) Raises a number to a power. Example power(2, 3) Returns: 8 Example power(quantity, 2) Returns the square of quantity. 19. getDateValue(dateValue, format) Formats a date/time value. Example getDateValue(createdtime, 'd/m/Y') Formats createdtime as day/month/year. Example getDateValue(createdtime, 'l j \of F Y h:i:s A') Could produce something like: Monday 4 of March 2026 09:15:22 AM Example getDateValue('d/m/Y') Formats the current date/time using the given format. Common use Store a user-friendly date string: getDateValue(closingdate, 'd.m.Y') 20. str_contains(a, b) Checks whether two |##|-separated multi-value strings share at least one common value. Example str_contains(cf_1234, 'Blue|##|Green') Returns true if cf_1234 contains either Blue or Green. Important note This is not a normal substring search. It is mainly useful for multi-select picklist style values. Example If cf_1234 contains: Red|##|Blue|##|Yellow then: str_contains(cf_1234, 'Blue|##|Green') returns true. 21. RecurrenceRuleAsDates(sourcefield, format, endDate, startDate) Creates a comma-separated list of dates from a recurrence rule field. Example RecurrenceRuleAsDates(recurrence_rule, 'd/m/Y', '31/12/2026', '01/01/2026') Useful in advanced scheduling or recurrence-based workflows. 22. GetFieldValue(sourcefield) Returns a field value. Example GetFieldValue(firstname) Returns the value of firstname. Example with related field GetFieldValue((account_id : (Accounts) phone)) Returns the phone number from the related Account. Note In many simple cases, the field can be used directly without wrapping it in GetFieldValue(). 23. GetTime(sourcefield) Converts a decimal hour value into HH:MM. Example GetTime(1.5) Returns: 01:30 Example GetTime(hours_worked) If hours_worked is 2.75, the result would be: 02:45 24. UrlDecode(sourcefield) URL-decodes a string. Example UrlDecode(cf_encoded_text) If the field contains: Hello%20World it returns: Hello World 25. changeCase(sourcefield, operation) Changes the letter case of text. Supported operations: - 'upper' - 'lower' - 'ucfirst' - 'ucwords' Example changeCase(lastname, 'upper') Result: SMITH Example changeCase(firstname, 'ucfirst') Result: John Example changeCase(accountname, 'ucwords') If the value is: big blue systems the result is: Big Blue Systems Common use Normalize all-uppercase imports: changeCase(firstname, 'ucfirst') 26. searchModule(module, field, operator, value, returnFields) Searches another module and returns matching records as JSON. Supported operators: - 'equal' - 'contains' - 'notequal' Example searchModule('Contacts', 'email', 'equal', email, '[firstname,lastname,email]') Searches Contacts where email exactly matches the current record email. Example searchModule('Accounts', 'accountname', 'contains', accountname, '[id,accountname,phone]') Searches Accounts whose account name contains the current record account name. Note This is an advanced function, mainly useful for integrations and automation logic. 27. jsonArrayMerge(param1, param2) Merges two JSON arrays or JSON objects. Example jsonArrayMerge('{"a":1}', '{"b":2}') Result: {"a":1,"b":2} Example jsonArrayMerge(cf_json_part1, cf_json_part2) Combines two JSON values from fields. 28. json_get(fieldname, key) Reads a value from JSON using a key path. Example json_get(cf_json_payload, 'customer.name') Returns the nested value of customer.name. Example json_get(cf_json_payload, 'items[0].sku') Returns the sku of the first item in the items array. Example If cf_json_payload contains: {"customer":{"name":"John"}} then: json_get(cf_json_payload, 'customer.name') returns: John 29. json_set(fieldname, key, value) Sets or updates a value in JSON. Example json_set(cf_json_payload, 'customer.name', firstname) Updates customer.name using the current record firstname. Example json_set(cf_json_payload, 'status', 'Processed') Sets the top-level status value to Processed. Example If cf_json_payload contains: {"status":"New"} then: json_set(cf_json_payload, 'status', 'Processed') returns updated JSON similar to: {"status":"Processed"} 30. json_get_line_items(recordId) Returns line items from an inventory record as JSON. Example json_get_line_items(id) Useful in modules such as: - Quotes - Sales Orders - Purchase Orders - Invoices This is mainly for advanced integrations or JSON transformations. 31. getfieldOptions(Module.fieldname) Returns the available picklist options for a field as JSON. Example getfieldOptions('HelpDesk.ticketstatus') Returns the available values for the ticketstatus field in HelpDesk. Note This is mostly useful in advanced workflows or integrations. Arithmetic operators These operators can be used directly in expressions. Addition amount + 100 Adds 100 to amount. Subtraction amount - discount_amount Subtracts discount_amount from amount. Multiplication quantity * unit_price Calculates the total from quantity and unit price. Division amount / 2 Divides amount by 2. Comparison operators These operators can be used inside conditions. Equal amount == 1000 Greater than amount > 0 Less than amount < 0 Greater than or equal amount >= 500 Less than or equal amount <= 2000 Conditional expressions The expression engine supports if / then / else / end. Basic example if bill_country == 'Denmark' then 'DK' else 'Other' end Another example if amount >= 10000 then 'Enterprise' else 'SMB' end Nested example if amount > 10000 then 'Large' else if amount > 5000 then 'Medium' else 'Small' end Use nested conditions carefully to keep expressions readable. Related field syntax A field from a related record can be read using: (reference_field : (Module) fieldname) Example (contact_id : (Contacts) email) Returns the email of the related Contact. Example (account_id : (Accounts) phone) Returns the phone number of the related Account. Practical use Fill a field on the current record with a value from a linked Account: (account_id : (Accounts) website) Practical examples 1. Build a full name concat(firstname, ' ', lastname) 2. Create a due date 14 days from today add_days(14) 3. Create a due date 7 days after another date add_days(closingdate, 7) 4. Convert text to uppercase changeCase(lastname, 'upper') 5. Capitalize a first name changeCase(firstname, 'ucfirst') 6. Extract an email domain split(email, '@', 1) If email is john@example.com, the result is: example.com 7. Strip formatting from a phone number preg_replace_str_only('/[^0-9]/', '', phone) 8. Categorize a deal by amount if amount >= 10000 then 'Enterprise' else 'SMB' end 9. Pull a related Account phone number (account_id : (Accounts) phone) 10. Read a value from JSON json_get(cf_api_response, 'data.customer_id') 11. Format a date for display getDateValue(closingdate, 'd.m.Y') 12. Prefix a reference number concat('CASE-', ticket_no) Important notes 1. Always use single quotes for text Correct: 'Closed Won' Incorrect: "Closed Won" 2. concat() can take multiple parts Example: concat(firstname, ' ', lastname, ' (', email, ')') 3. str_contains() is for multi-value strings It checks overlap in values separated by |##|, not ordinary text search. 4. Some functions are advanced These are typically used in more advanced workflows or integrations: - searchModule() - jsonArrayMerge() - json_get() - json_set() - json_get_line_items() - getfieldOptions() - RecurrenceRuleAsDates() 5. Related-record syntax is especially useful Example: (account_id : (Accounts) phone) This makes it possible to pull values directly from linked records without custom code. Quick reference Text functions - substring() - preg_replace_str_only() - split() - concat() - UrlDecode() - changeCase() Date and time functions - time_diff() - time_diffdays() - add_days() - sub_days() - add_months() - sub_months() - get_date() - add_time() - sub_time() - getDateValue() - GetTime() Logic and numeric functions - power() - if / then / else / end - arithmetic operators - comparison operators Related-record access - (reference_field : (Module) fieldname) - GetFieldValue() JSON and advanced functions - searchModule() - jsonArrayMerge() - json_get() - json_set() - json_get_line_items() - getfieldOptions() - RecurrenceRuleAsDates() Summary These workflow expressions support: - field-based calculations - text formatting - date arithmetic - conditional logic - related-record lookups - JSON transformation - module search functions Most commonly used expressions include: - concat() - changeCase() - split() - add_days() - get_date() - if ... then ... else ... end - related-record syntax such as (account_id : (Accounts) phone)

Last updated on Mar 08, 2026

Dashboards in Simply CRM

Overview The Dashboard module in Simply CRM gives users a visual workspace where they can monitor key data, track performance, and organize important reports in one place. Simply CRM includes a set of standard dashboards out of the box, so users can start working immediately with ready-made views. Users can also create additional boards to organize widgets by team, process, department, or personal workflow. Each board can contain different types of widgets, and on their own boards only, users can: - add new widgets - reorganize widgets live - resize widgets live using the corner handles This makes dashboards flexible, practical, and easy to tailor to individual needs. What you can do in Dashboards With Dashboards in Simply CRM, users can: - work with prebuilt standard dashboards - create additional boards for different reporting needs - switch between multiple boards from the dashboard header - add widgets to their own boards - choose from different widget types when creating a widget - rearrange widgets directly on the screen - resize widgets directly on the screen using the widget corner handles - manage board-level actions such as editing, duplicating, transferring, or deleting boards, depending on permissions and setup Standard dashboards Simply CRM is delivered with standard dashboards already available. These provide users with immediate access to commonly used data views without requiring any setup. Standard dashboards are useful for: - getting a quick overview of activity - tracking operational or financial information - reviewing sales, project, or support metrics - giving teams a starting point before creating their own boards These default dashboards help users begin working right away while still allowing further customization through additional boards. Boards in Simply CRM A board is a dashboard layout that contains one or more widgets. Users can have multiple boards to separate information by purpose. For example, they may want one board for sales metrics, another for project status, and another for personal productivity widgets. Boards are shown as tabs or selectable items in the dashboard area, making it easy to move between different dashboard views. Typical board options Depending on permissions and configuration, board actions may include: - Add New Board - Edit Board - Transfer Board - Delete Board - Duplicate Board These options are usually available from the board actions menu. Note: The exact options available may depend on user role, ownership, and system configuration. How to create a new board Users can create additional boards when they want a separate dashboard for a specific purpose. To create a board 1. Open the Dashboard module. 2. Open the Boards menu or the board actions menu. 3. Click Add New Board. 4. Enter the required board details. 5. Save the board. Once created, the new board becomes available in the dashboard navigation. How to switch between boards If multiple boards are available, users can move between them from the top area of the dashboard. To switch boards 1. Open the Dashboard module. 2. Click the board tab you want to open, or use the Boards dropdown. 3. The selected board will load and display its widgets. This lets users keep separate dashboard layouts for different teams, business areas, or use cases. Adding widgets to a board Users can add widgets to their own boards only. To do this, they use the Add Widget button and choose the widget type they want to create. This makes it possible to build a dashboard that matches the user’s reporting needs. To add a widget 1. Open one of your own boards in the Dashboard module. 2. Click Add Widget. 3. Choose the widget type you want to create. 4. Select or configure the widget source, depending on the widget type. 5. Save the widget. The widget will then appear on the current board. Important: Users can add widgets only to their own boards. Widget types When adding a widget, users can select from different widget types made available in the system. Examples may include: - detail report widgets - chart widgets - pivot table widgets - standard widgets - custom or shared widgets, depending on system configuration The available options may vary depending on how Simply CRM has been set up. Note: The widget types shown in Add Widget depend on the reports, shared items, and standard widgets available in the system. Reorganizing widgets on a dashboard Widgets on a user’s own boards only can be reorganized live directly on the dashboard. This allows users to change the layout without leaving the page, making it easier to keep the most important information visible at the top. To reorganize widgets 1. Open one of your own boards. 2. Click and hold the widget you want to move. 3. Drag it to the desired position on the dashboard. 4. Release it to place it in the new location. The dashboard layout updates immediately, allowing users to arrange widgets in the order that fits their workflow. Important: Live widget reorganization is available only on the user’s own boards. Resizing widgets on a dashboard Widgets on a user’s own boards only can also be resized live. Users can adjust the size of a widget by dragging the corner handles, which helps them give more space to the most important reports or compress smaller widgets to free up room. To resize a widget 1. Open one of your own boards. 2. Locate the widget you want to resize. 3. Use the corner handles on the widget. 4. Drag outward or inward to increase or decrease the widget size. 5. Release when the widget reaches the desired dimensions. This gives users more control over how information is displayed on the dashboard. Important: Live widget resizing is available only on the user’s own boards. Managing board layout effectively A good dashboard layout helps users find important information faster. Best practices - keep the most important widgets near the top - use larger widget sizes for charts or widgets that need more detail - group related widgets together on the same board - create separate boards for different teams or business purposes - avoid overcrowding a board with too many widgets A cleaner layout makes dashboards easier to read and more useful in daily work. Example use cases Users may create different boards for different goals, such as: Sales board Track pipeline, deals, revenue, and activity widgets in one place. Project board Monitor project status, progress charts, and workload metrics. Support board Display ticket-related reports, response activity, and team performance. Personal board Create a focused dashboard with only the widgets most relevant to the individual user. Notes and limitations - Simply CRM includes standard dashboards by default. - Users can create additional boards for more personalized dashboard layouts. - Users can add widgets only to their own boards. - Users can reorganize and resize widgets only on their own boards. - Widget resizing is done using the corner handles on each widget. - Available widget types may vary depending on configuration, permissions, and available reports. Troubleshooting I do not see the Add Widget button Make sure you are viewing your own board. Users can add widgets only to boards they own or are allowed to customize. I cannot move or resize a widget Live reorganization and resizing are available only on your own boards. If the board is not yours, these options may not be available. I do not see the widget type I need The available widget types depend on system setup and what reports or widgets are available in your environment. I cannot see board management options Some board actions may depend on permissions, ownership, or administrator settings. Summary The Dashboard module in Simply CRM is designed to give users a flexible and visual way to work with business data. Users can start with standard dashboards, create additional boards for their own needs, and build out those boards with widgets using the Add Widget button. On their own boards only, they can also reorganize and resize widgets live, using the corner handles to create a layout that fits the way they work.

Last updated on Mar 23, 2026

Workflow Actions in Simply CRM

Overview Workflow actions in Simply CRM let you automate what happens after a workflow condition is met. Instead of only notifying users, a workflow can also update data, create records, send emails, trigger external systems, generate documents, and even use AI-powered actions. This article covers the workflow actions currently available in your setup, what each action does, how it works, and a practical example of when to use it. Before you start A few workflow actions depend on optional features or add-on modules being enabled in your Simply CRM instance, such as: - Document Designer - Rollup - Real-Time Field Updates - AI features - Custom functions If one of these actions appears in your workflow builder, it is available in your environment. Available workflow actions Send Mail Sends an email automatically when the workflow runs. How it works This action builds and sends an email from workflow settings and record data. It supports: - dynamic recipients - CC and BCC - Reply-To - sender selection - HTML email content - attachments - optional PDF attachments - document-based attachments - linking the sent email back to the related record This is useful when you want a workflow to send a message without relying on a predefined email template. Example When a Deal is marked as Won, send a confirmation email to the customer with the deal summary and a PDF attachment. Invoke Custom Function Runs a custom backend function from a workflow. How it works This action calls a registered custom method when the workflow is triggered. It is typically used for advanced business logic that is too specific for standard workflow actions. This is a developer-driven action, so the exact behavior depends on the custom function that has been added to your Simply CRM setup. Example When an Invoice is approved, call a custom function that sends the invoice data to an accounting system and stores the returned external ID. Update Fields Updates field values on the current record, or on referenced records, as part of the workflow. How it works This is the standard field update action. It can: - set a fixed value - copy a value from another field - calculate a value using an expression - update reference-related fields - handle dates, times, currencies, picklists, multipicklists, and owners - update record labels when name fields change This is the main action to use when you want the workflow to keep record data clean and consistent. Example When a Lead is converted to a Customer, automatically set: - Status = Customer - Lifecycle Stage = Active - Follow-up Date = 7 days from today Create Record Creates a new record in another module from the current record. How it works This action creates a new record and maps values from the source record into the target module. It can also populate a reference field so the new record is connected back to the source record. Depending on configuration, it can also support more advanced creation patterns such as multiple record creation or split-based creation in some modules. Example When an Opportunity reaches Proposal Sent, automatically create a Quote and copy over the Account, Contact, Amount, and Expected Close Date. Add WebHook Sends data from Simply CRM to an external URL. How it works This action makes an HTTP request to a configured endpoint. It supports: - URL variables - record field placeholders - global variables - authentication - headers - URL parameters - payload values - file sending - response handling It can also process the response and write returned values back into Simply CRM fields. Example When a Sales Order is created, call the warehouse API to create a fulfillment request and write the returned shipment reference back to the order. Update Relations (One To Many) Updates fields on records that are already related to the current record. How it works This action looks at a related module and writes values from the current record into related records. It is designed for one-to-many style updates and can update: - all related records - only the last related record This is useful when a parent record should push a value down to its related records. Example When an Account owner changes, update the same owner or account segment field on all related Contacts. Send email from template Sends an email using a selected email template. How it works This action renders a template with data from the current record and then sends it. It supports: - dynamic recipients - CC and BCC - Reply-To - template-based subject and body - default/fallback templates in some setups - optional PDF attachment support - email tracking and linking back to the record This is the best choice when your emails follow a consistent format. Example When a Support Ticket is closed, send a branded closure email using the ticket-close email template. Select RelatedRecord Finds one or more records in another module and relates them to the current record, or writes the found record into a reference field. How it works This action searches in a target module using: - a source field value - an expression - exact match or contains logic - optional advanced filters Once matching records are found, it can either: - create a relation in the related list, or - set a reference field on the current record Use this when the workflow should automatically find the right existing record. Example When a Lead is created and its Company Name matches an existing Account Name, automatically link the Lead to that Account. Rollup/Calculate Fields Task Recalculates or aggregates values based on related records. How it works This action is tied to the Rollup feature. It is typically used to calculate values such as: - totals - counts - averages - latest values - summary fields pulled from related records The exact options depend on how the Rollup module is configured in your system. Example When an Invoice is created, recalculate the total billed amount on the related Account. Select Related Module Pulls related records from one module into another relation on the current record. How it works This action works by using an already-related source module and then copying that source module’s related records into another related module on the current record. In practice, it helps carry relations across connected records. Example If an Opportunity is related to an Account, and that Account already has related Contacts, this action can relate those same Contacts to the Opportunity automatically. Send Email with Document Designer attachments Sends an email that includes files generated through Document Designer. How it works This action depends on the Document Designer feature. It uses Document Designer output as part of the email process, so the workflow can send polished documents without manual export or attachment steps. This is especially useful for proposals, invoices, confirmations, or other formatted business documents. Example When a Quote is approved, email the customer a generated PDF proposal as an attachment. Save Document from Document Designer Creates and saves a document generated by Document Designer. How it works This action generates a document from a Document Designer template and saves it from the workflow. Depending on your setup, that may mean saving it to the record, to attachments, or to a document-related location in Simply CRM. Use this when you want document generation to happen automatically, even if no email needs to be sent. Example When an Invoice moves to Posted, automatically generate and save the official invoice PDF. Dynamic Dropdown Rebuilds a picklist field from values found in another module. How it works This action reads values from a selected source module, using a selected list/filter and a chosen source field. It then: - collects the values - removes duplicates - clears the target dropdown values - inserts the refreshed set of values into the target picklist - applies the selected ordering This is useful when a dropdown should stay in sync with live CRM data. Important Because this action clears and rebuilds the target dropdown, it should be used carefully. Example Build a “City” dropdown in one module based on unique city values found in Account records. Validate URL Checks whether a URL or domain is valid and writes the result to a field. How it works This action reads a source field, attempts to validate the domain, checks DNS/IP resolution, and then tests the URL response. It writes a status message into a target field. Possible outcomes include messages such as: - Valid Domain - Valid IP but page not responding - Domain is not valid If the source value is an email address, the action can use the domain part for validation. Example When a new Lead is created, validate the Website field and write the result into a custom field called Website Check Result. Field Updates Updates fields with a more specialized field-update action. How it works Based on the implementation, this action appears to be a more specialized version of field updating, mainly intended for inventory-style records and line-item-aware updates. It supports field mapping similarly to standard field updates, but is better suited where product, quantity, price, or related inventory values are involved. If you work with Quotes, Sales Orders, Purchase Orders, or Invoices, this action is likely intended for those cases. Example When a Quote is updated, copy or adjust specific inventory-related values such as quantity, price, or item-level custom values. Create Records from Json Creates one or more records by reading JSON stored in a field. How it works This action reads a JSON field on the source record, loops through the entries in that JSON array, and creates a new target record for each item. It can: - map JSON keys into target fields - combine JSON values with normal record values - use expressions - set reference fields back to the source record This is ideal when a single record contains structured imported data that needs to be split into separate CRM records. Example A web form stores an array of submitted attendees in a JSON field. This action creates one Contact record for each attendee. Related Records Update Updates fields on records that are already related through a many-to-many style relationship. How it works This action finds related records in a selected target module and copies a value from the source record into a chosen field on those related records. Unlike Select RelatedRecord, this action does not search for new records to relate. Instead, it updates records that are already related. Example When a Campaign’s custom event code changes, update the same code field on all related Product records. Query Task Runs a database query against an external MySQL-compatible database and uses the result in Simply CRM. How it works This action connects to an external database using the configured host, port, username, password, and database name. It then runs the configured query, which can include values from the current CRM record. The result can then be used to: - update the current record - create new records - update matching records based on a lookup field This is a powerful integration action, but it should be used carefully because it directly depends on external database access and valid SQL. Example When an Account is saved, query a legacy customer database for the credit rating and update the CRM record with the returned score. AI workflow action Uses AI to generate or transform text and store the result in a field. How it works This action sends either: - text from a field, or - custom text/prompt content to the AI service, then writes the result into a target field. It supports use cases such as: - translation - prompt-based generation - writing to the current record - writing to a related/reference record field This is best for text enrichment and language tasks. Example When a support request is received in Danish, translate the message into English and store the result in an internal field for the support team. Another example is generating a short AI summary of a long case description. Choosing the right action Here is a practical way to decide which action to use: - Use Update Fields when you want to change values on the current record. - Use Create Record when the workflow should generate a new CRM record. - Use Send Mail or Send email from template when the workflow should contact someone automatically. - Use Add WebHook or Query Task when the workflow needs to interact with an external system. - Use Select RelatedRecord, Select Related Module, Update Relations (One To Many), or Related Records Update when the workflow should work with related records. - Use Document Designer actions when the workflow should generate or send documents. - Use AI workflow action when the workflow should create, translate, or transform text. Best practices Test with a sample record first Before enabling a workflow for all users, test it on a record that clearly matches the workflow conditions. Keep related-record logic simple If a workflow both creates relations and updates related records, start with one action first. Complex relation logic is easier to troubleshoot in smaller steps. Be careful with Dynamic Dropdown This action rebuilds the target dropdown values. That makes it powerful, but it also means it can replace the full list of options. Use templates for reusable emails If the email should always follow the same branding or wording, use Send email from template instead of building the email directly in the workflow. Watch for looping behavior Actions like Update Fields, Create Record, and some relation-based actions can trigger additional workflows depending on your setup. Review workflow conditions carefully to avoid unintended recursion. Summary Simply CRM’s workflow actions cover four main automation needs: - updating data - creating or linking records - communicating by email or document - connecting to outside systems Used well, they can remove a lot of manual work and make your processes more consistent.

Last updated on Mar 23, 2026