Verify and Standardize Salesforce Addresses with Google’s Address Validation API

Verify and Standardize Salesforce Addresses with Google’s Address Validation API

Last Updated on June 24, 2023 by Rakesh Gupta

Big Idea or Enduring Question:

  • How to integrate Salesforce with Google’s Address Validation API to validate an address via Salesforce Flow?

Objectives:

After reading this blog, you’ll be able to:

  • Create Named Credentials for outbound requests.
  • How Google’s Address Validation works.
  • Benefits of using Address Validation.
  • Initiate an outbound HTTP POST request utilizing Salesforce Flow without the need for code.
  • Manage the outbound request response and implement appropriate actions.
  • and much more

👉 Previously, I’ve penned several posts on the topic of interfacing Salesforce with a diverse range of systems. Why not check them out while you are at it?!

  1. Generate Barcode and QR Code in Salesforce
  2. Integrate Salesforce with OpenWeatherMap Using Salesforce Flow

Business Use case

Jestilla Zetkin is currently serving as a Salesforce Architect at Gurukul On Cloud (GoC). In the course of her engagement with Sales Cloud implementation, she was entrusted with the responsibility of creating a mechanism to validate an Account’s Shipping Address, inclusive of the ability to automatically detect imprecise addresses or those with incomplete or unconfirmed components. The detailed requirements included:

  1. Incorporating an option to manually initiate Address Validation from the account.
  2. Ability to detect inaccurate addresses by identifying missing or unconfirmed address component and auto provide correct address.
  3. Additionally bring:
    1. County details
    2. Indication of a PO Box address
    3. Identification of a Business Address
    4. Designation of a Residential Address
  4. In the event of a failed response, institute a contingency action to create a task for the account’s designated owner.

What is Google’s Address Validation API?

Addresses play an essential role in locating individuals and places, delivering goods, and sometimes facilitating banking transactions. However, erroneous or misspelled addresses, although difficult to identify, can significantly complicate these processes. While addresses may appear simple due to their everyday use, uncorrected and improperly formatted ones can result in subpar user experiences, unsuccessful deliveries, and costly, time-consuming customer support.

The Address Validation API empowers developers to enhance the accuracy of address data. It provides detailed insights into the validity of the various components of an address, along with a geocode and an assessment of the address’s deliverability. This tool enhances user experience by streamlining processes like account creation or checkout and promotes business efficiency by mitigating the consequences of incorrect addresses on operational procedures.

How Address Validation Works?

Address Validation is a powerful tool that allows developers to pinpoint inaccurate addresses by highlighting unconfirmed or absent address components. Leveraging the extensive Places data of the Google Maps Platform and a comprehensive understanding of local address formats, the API refines the input. It offers a broad range of corrective measures from fixing typos and completing street names, to implementing locality-specific formatting, and beyond.

Moreover, Address Validation generates beneficial metadata about the reviewed address, including individual address components each assigned with an accuracy confirmation level, Plus Code, geocode, and the Place ID. In specific regions, it can discern between a residential and a commercial address, a crucial distinction for package delivery during business hours. Address Validation draws from a multitude of sources, including postal service data. The Address Validation API has earned the prestigious CASS Certification™ from USPS®, signifying that developers can cross-verify with U.S. Postal Service® data.

Use this link to explorer and see how the API responds to common address mistakes.

Benefits of Using Address Validation

Utilizing Address Validation offers numerous advantages across a variety of industries and use cases. Here are some exemplary instances

  1. Address Validation enables the verification of address existence during account creation, while also serving as a tool for risk assessment through address verification.
  2. It aids in eliminating costly issues that arise from incorrect address entries, such as failed deliveries, order cancellations, and chargebacks. These improvements ultimately bolster customer retention and enhance customer lifetime value.
  3. Improve your delivery success rate with better awareness of address validity and location.
  4. Address Validation streamlines the customer checkout process by offering address corrections and suggestions, ensuring timely deliveries to accurate locations.
  5. It provides more than just postal service data, augmenting addresses with additional useful information for a comprehensive understanding.

Understand the Validation Response

The Address Validation API takes an address as input. The API then returns a response that contains:

  • The verdict for the validation of the entire address and for the validation of each address component (street number, street name, city, etc.).
  • A single string containing the complete address as determined by the API.
  • Individual properties containing each component of the address as determined by the API.
  • A list of any missing address components, of any unconfirmed address components, and of any address components that could not be resolved.
  • The geocode of the address.
  • For the “US” and “PR” regions, the USPS data for the address.

Using the API response, you can ensure that the address exists and is of the quality necessary for your needs. If the response from the API indicates that an address is incomplete or incorrect, you can prompt the user to update the address. After the user completes the update, use the API to validate the updated address.

To validate an address using the Address Validation API, call the validateAddress method (REST) or ValidateAddress method (gRPC). Validate an address by sending a POST request to the validateAddress method:

https://addressvalidation.googleapis.com/v1:validateAddress?key=YOUR_API_KEY

Pass a JSON body to the request defining the address to validate. Here’s an illustrative example of a request body.

{
  "address": {
    "regionCode": "US",
    "locality": "Mountain View",
    "administrativeArea": "CA",
    "postalCode": "94043",
    "addressLines": ["1600 Amphitheatre Pkwy"]
  },
  "enableUspsCass": true
}

The United States Postal Service® (USPS®)1 maintains the Coding Accuracy Support System (CASS™) to support and certify address validation providers. A CASS Certified™ service, such as the Address Validation API, has been confirmed for its ability to fill in information missing from an address, standardize it, and update it to give you the most current and most accurate address.

Here’s an illustrative example of a response obtained from invoking the Google’s Address validation API:

{
  "result": {
    "verdict": {
      "inputGranularity": "PREMISE",
      "validationGranularity": "PREMISE",
      "geocodeGranularity": "PREMISE",
      "addressComplete": true,
      "hasInferredComponents": true
    },
    "address": {
      "formattedAddress": "1600 Amphitheatre Parkway, Mountain View, CA 94043-1351, USA",
      "postalAddress": {
        "regionCode": "US",
        "languageCode": "en",
        "postalCode": "94043-1351",
        "administrativeArea": "CA",
        "locality": "Mountain View",
        "addressLines": [
          "1600 Amphitheatre Pkwy"
        ]
      },
      "addressComponents": [
        {
          "componentName": {
            "text": "1600",
            "languageCode": "en"
          },
          "componentType": "street_number",
          "confirmationLevel": "CONFIRMED"
        },
        {
          "componentName": {
            "text": "Amphitheatre Parkway",
            "languageCode": "en"
          },
          "componentType": "route",
          "confirmationLevel": "CONFIRMED"
        },
        {
          "componentName": {
            "text": "Mountain View",
            "languageCode": "en"
          },
          "componentType": "locality",
          "confirmationLevel": "CONFIRMED"
        },
        {
          "componentName": {
            "text": "USA",
            "languageCode": "en"
          },
          "componentType": "country",
          "confirmationLevel": "CONFIRMED"
        },
        {
          "componentName": {
            "text": "94043"
          },
          "componentType": "postal_code",
          "confirmationLevel": "CONFIRMED",
          "inferred": true
        },
        {
          "componentName": {
            "text": "CA",
            "languageCode": "en"
          },
          "componentType": "administrative_area_level_1",
          "confirmationLevel": "CONFIRMED",
          "inferred": true
        },
        {
          "componentName": {
            "text": "1351"
          },
          "componentType": "postal_code_suffix",
          "confirmationLevel": "CONFIRMED",
          "inferred": true
        }
      ]
    },
    "geocode": {
      "location": {
        "latitude": 37.4223878,
        "longitude": -122.0841877
      },
      "plusCode": {
        "globalCode": "849VCWC8+X8"
      },
      "bounds": {
        "low": {
          "latitude": 37.4220699,
          "longitude": -122.084958
        },
        "high": {
          "latitude": 37.4226618,
          "longitude": -122.0829302
        }
      },
      "featureSizeMeters": 116.538734,
      "placeId": "ChIJj38IfwK6j4ARNcyPDnEGa9g",
      "placeTypes": [
        "premise"
      ]
    },
    "metadata": {
      "business": false,
      "poBox": false,
      "residential": false
    },
    "uspsData": {
      "standardizedAddress": {
        "firstAddressLine": "1600 AMPHITHEATRE PKWY",
        "cityStateZipAddressLine": "MOUNTAIN VIEW CA 94043-1351",
        "city": "MOUNTAIN VIEW",
        "state": "CA",
        "zipCode": "94043",
        "zipCodeExtension": "1351"
      },
      "deliveryPointCode": "00",
      "deliveryPointCheckDigit": "0",
      "dpvConfirmation": "Y",
      "dpvFootnote": "AABB",
      "dpvCmra": "N",
      "dpvVacant": "N",
      "dpvNoStat": "Y",
      "carrierRoute": "C909",
      "carrierRouteIndicator": "D",
      "ewsNoMatch": false,
      "postOfficeCity": "MOUNTAIN VIEW",
      "postOfficeState": "CA",
      "fipsCountyCode": "085",
      "county": "SANTA CLARA",
      "elotNumber": "0103",
      "elotFlag": "A",
      "poBoxOnlyPostalCode": false,
      "addressRecordType": "S"
    }
  },
  "responseId": "de22bed8-7f52-44cb-8526-faceac57150a"
}

Read Address Validation API documentation to understanding about different parameters and capabilities.

Prerequisite

Before you start using the Address Validation API, you need a project with a billing account and the Address Validation API enabled. This help article shows how to set up your Google Cloud project before using the Google Maps Platform API.

While the Address Validation API does support OAuth 2.0 and Service account for authentication, I will not be covering it in this article to keep it concise. 

Before taking the next step, make sure that you have API key handy to work with Salesforce Flow.

Automation Champion Approach (I-do):

While this can be solved using various automation tools like Apex Code, AppExchange Apps and others, we will use Salesforce Flow and newly introduced HTTP POST Callout flow feature.

HTTP Callout pulls or sends data between the Salesforce database and an external system via Flow Builder without using code. You can set up direct integrations as needed without having to work with a developer or call a middleware tool, such as Mulesoft. After you configure the HTTP callout action in a flow, Flow Builder auto-generates an external service registration, an invocable action, and Apex class that you can use to create an Apex-defined resource for flows. You can then use the data output of the API request as input within Flow Builder and across Salesforce.

You can use HTTP Callout to connect a flow to a variety of APIs.

  • Get address information using a map API
  • Get weather conditions with a weather service API
  • Generate the barcode with a barcode service API
  • Get payment authorization information with a payment processing API
  • and much more

Before discussing the solution, let me show you a diagram of the process at a high level. Please spend a few minutes going through the following Flow diagram to understand it.


Let’s begin building this automation process.

Guided Practice (We-do):

There are 4 steps to solve Jestilla’s business requirement using Screen Flow. We must:

  1. Create custom fields on the Account to store the response
  2. Create a Named Credential
  3. Salesforce Flow
    1. Define flow properties for Screen Flow
    2. Add a text variable to store the record Id
    3. Add a collection variable text to store the shippingStreets
    4. Add a Get Records element to find the current account
    5. Configure an HTTP POST callout for Address Validation API
    6. Add an Apex-Defined variable to store request body
    7. Add an Assignment element to construct the HTTP POST request body
    8. Add action – Make an HTTP POST callout
    9. Add a Decision element to check the response code
    10. Add a screen to display the response received from Address Validation API
    11. Add a Decision element to check the user-selected option (from step 3.9)
    12. Add an Update Records element to update the account
    13. Add a Create Records element to create a Task for the Account owner to handle error response
  4. Create a Quick Action to Launch the Flow.

Step 1: Create Custom Fields on the Account Object to Store the Response

  1. Click Setup.
  2. In the Object Manager, type Account.
  3. Select Fields & Relationships, then click New.
  4. Now create few custom fields as shown in the screenshot below:
  5. Click Save.

Step 2: Create a Named Credential

  1. Click Setup.
  2. In the Quick Find box, enter Named Credentials, and then select Named Credentials.
  3. Click New Legacy.
  4. Fill out the page with the callout endpoint’s URL and authentication parameters.
  5. Click Save.

Step 3.1: Define Flow Properties

  1. Click Setup.
  2. In the Quick Find box, type Flows.
  3. Select Flows, then click on the New Flow.
  4. Select the Screen Flow option and click on Create and configure the flow. 
  5. It will open the flow designer for you.

Step 3.2: Add a Text Variable to Store Account Id

  1. Under Toolbox, select Managerthen click New Resource to store the account Id. 
  2. Input the following information
    1. Resource Type:Variable
    2. API Name: recordId
    3. Data Type: Text
    4. Default Value{!$GlobalConstant.EmptyString}
    5. Check Available for Input
    6. Check Available for Output
  3. Click Done.

Step 3.3: Add a Collection Variable Text to Store ShippingStreets

  1. Under Toolbox, select Managerthen click New Resource to store the ShippingStreets
  2. Input the following information
    1. Resource Type:Variable
    2. API Name:varT_ShippingStreet
    3. Data Type: Text
    4. Default Value{!$GlobalConstant.EmptyString}
    5. Check Allow multiple values (collection) 
    6. Check Available for Input
    7. Check Available for Output
  3. Click Done.

Step 3.4: Adding a Get Record Element to Find the Current Account

The next step is using the Get Records object to find the current account.

  1. On Flow Designer, click on the +icon and select the Get Records element.
  2. Enter a name in the Label field; the API Name will auto-populate.
  3. Select the Account object from the drop-down list.
  4. Select All Conditions Are Met (AND). 
  5. Set Filter Conditions
    1. Row 1:
      1. Field: Id
      2. Operator: Equals
      3. Value: {!recordId}
  6. How Many Records to Store:
    1. Select Only the first record
  7. How to Store Record Data:
    1. Choose the option to Automatically store all fields
  8. Click Done.

Step 3.5: Configure an HTTP POST Callout Action

HTTP Callout guides you through entering the details about the HTTP web-based service or REST API endpoint that you’re connecting to. After you complete the configuration, you invoke the action in a flow.

  1. On Flow Designer, click on the +icon and select the Action.
  2. Click + Create HTTP Callout.
  3. Configure the external service that connects Salesforce to the HTTP-based API.
    1. Enter a Name for the external service.
    2. Select the named credential that you created in the step 2.
    3. Click Next.
  4. The next step is to configure the invocable action that you can use in Flow Builder or across Salesforce.
    1. For Label, enter the action that the callout performs.
    2. Method: POST
    3. Add the URL endpoint for the request.
      1. URL Path/v1:validateAddress
    4. Add query parameter keys if the API you’re calling has them. When you use this action in a flow, you input values for the defined keys.
      1. Click Add Key
        1. Key: key
        2. Data Type: String
        3. Required: True
    5. Provide a sample API request body. Salesforce generates a data structure from the sample request.
      1. Click New.
      2. Paste a sample JSON request.
      3. Click Review and confirm that the Apex data structure is correct.
      4. To make changes, edit the text in Sample JSON Request or select data types from the data structure.
      5. Click Review.
      6. Click Done.
    6. Provide a sample API response body. Salesforce generates a data structure from the sample response.
      1. Navigate to Provide Sample Response section.
      2. Click New.
      3. Paste a sample JSON response.
      4. Click Review and confirm that the Apex data structure is correct.
      5. To make changes, edit the text in Sample JSON Response or select data types from the data structure.
      6. Click Review.
      7. Click Done.
  5. Click Save.
  6. Click Done.

Step 3.6: Add an Apex-Defined Variable to Store Request Body

  1. Under Toolbox, select Managerthen click New Resource to store the request body.
  2. Input the following information: 
    1. Resource Type:Variable
    2. API Name:address
    3. Data Type: Apex-Defined
    4. Apex Class: ExternalService__GoogleAddressValidationAPI_Verifyx20Address_IN_body
    5. Check Available for Input
    6. Check Available for Output
  3. Click Done.

Step 3.7: Adding an Assignment Element to Construct the HTTP POST Request Body

The next step is to construct the HTTP POST request body. For this, we will use an Assignment element. 

  1. On Flow Designer, click on the +icon and select the Assignment element.
  2. Enter a name in the Label field; the API Name will auto-populate.
  3. Set Variable Values
    1. Row 1:
      1. Field: {!varT_ShippingStreet}
      2. Operator: Add
      3. Value: {!Get_Account.ShippingStreet}
    2. Click Add Assignment
    1. Row 2:
      1. Field: {!address.address.addressLines}
      2. Operator: Equals
      3. Value: {!varT_ShippingStreet}
    2. Click Add Assignment
    1. Row 3:
      1. Field: {!address.address.locality}
      2. Operator: Equals
      3. Value: {!Get_Account.ShippingCity}
    2. Click Add Assignment
    1. Row 4:
      1. Field: {!address.address.postalCode}
      2. Operator: Equals
      3. Value: {!Get_Account.ShippingPostalCode}
    2. Click Add Assignment
    1. Row 5:
      1. Field: {!address.address.regionCode}
      2. Operator: Equals
      3. Value: {!Get_Account.ShippingCountry}
    2. Click Add Assignment
    1. Row 6:
      1. Field: {!address.address.administrativeArea}
      2. Operator: Equals
      3. Value: {!Get_Account.ShippingState}
    2. Click Add Assignment
  4. Click Done.

Step 3.8: Adding an Action to Make an HTTP POST Callout

  1. On Flow Designer, click on the + icon and select the Action element.
  2. Select the VerifyAddress External Service Invocable Apex class.
  3. Enter a name in the Label field- the API Name will auto-populate.
  4. Set Input Values:
    1. body: {!address} (This is Apex-Defined Variable)
    2. key: YOUR_API_KEY
  5. Click Done.

Step 3.9: Using Decision Element to Check the Address Validation API Callout Response Code

Now we will use the Decision element to check the Google’s Address Validation API response code.

  1. On Flow Designer, click on the +icon and select the Decision element.
  2. Enter a name in the Label field; the API Name will auto-populate.
  3. Under Outcome Details, enter the Label the API Name will auto-populate.
  4. Condition Requirements to Execute OutcomeAll Conditions Are Met (AND)
    1. Row 1:
      1. Resource: {!HTTPS_POST_Callout.responseCode}
      2. Operator: Equals
      3. Value: 200
  5. Click Done.

Step 3.10: Add a Screen Element to Display the Response Received from Google’s Address Validation API

  1. Under Success Node, click on the +icon and select the Screen element on Flow Designer.
  2. Input the following information:
    1. Enter Label the API Name will auto-populate.
  3. Check out the video for step-by-step instructions and some tips.

Step 3.11: Using Decision Element to Check the User Selected Option (from Step 3.9)

Now we will use the Decision element to check, if the user wants to update Google’s provided address or keep using the previously entered address.

  1. On Flow Designer, click on the +icon and select the Decision element.
  2. Enter a name in the Label field; the API Name will auto-populate.
  3. Under Outcome Details, enter the Label the API Name will auto-populate.
  4. Condition Requirements to Execute OutcomeAll Conditions Are Met (AND)
    1. Row 1:
      1. Resource: {!Confirm}
      2. Operator: Equals
      3. Value: {!$GlobalConstant.True}
  5. Click Done.

Step 3.12: Adding an Update Records Element to Update the Account

The next step is to update the accounts fields to store the callout response. We will use the Update Records element. 

  1. On Flow Designer, below the Use Verified Address node, click on the +icon and select the Update Records element.
  2. Enter a name in the Label field; the API Name will auto-populate.
  3. For How to Find Records to Update and Set Their Values select Specify conditions to identify records, and set fields individually
  4. Object: Account
  5. Select All Conditions Are Met (AND).
  6. Set Filter Conditions
    1. Row 1:
      1. Field: Id
      2. Operator: Equals
      3. Value: {!recordId}
  7. Set Field Values for the Account Records
    1. Row 1:
      1. Field: ShippingCity
      2. Value: {!HTTPS_POST_Callout.2XX.result.address.postalAddress.locality}
    2. Click Add Field
    3. Row 2:
      1. Field: ShippingCountry
      2. Value{!HTTPS_POST_Callout.2XX.result.address.postalAddress.regionCode}
    4. Click Add Field
    5. Row 3:
      1. Field: ShippingPostalCode
      2. Value: {!HTTPS_POST_Callout.2XX.result.address.postalAddress.postalCode}
    6. Click Add Field
    7. Row 4:
      1. Field: ShippingState
      2. Value: {!HTTPS_POST_Callout.2XX.result.address.postalAddress.administrativeArea}
    8. Click Add Field
    9. Row 5:
      1. Field: ShippingStreet
      2. Value: {!HTTPS_POST_Callout.2XX.result.uspsData.standardizedAddress.firstAddressLine}
    10. Click Add Field
    11. Row 6:
      1. Field: County__c
      2. Value: {!HTTPS_POST_Callout.2XX.result.uspsData.county}
    12. Click Add Field
    13. Row 7:
      1. Field: PO_Box__c
      2. Value: {!HTTPS_POST_Callout.2XX.result.metadata.poBox}
    14. Click Add Field
    15. Row 8:
      1. Field: Business_Address__c
      2. Value: {!HTTPS_POST_Callout.2XX.result.metadata.business}
    16. Click Add Field
    17. Row 9:
      1. Field: Residential_Address__c
      2. Value: {!HTTPS_POST_Callout.2XX.result.metadata.residential}
  8. Click Done.

Step 3.13: Add Action – Create a Record to Handle Error Response

The next step is to create a task, for this, we will use the Create Records element.

  1. On Flow Designer, below the Error node, click on the +icon and select the Create Records element.
  2. Enter a name in the Label field; the API Name will auto-populate.
  3. Input the following information:
    1. Enter Label the API Name will auto-populate.
    2. How Many Records to Create: One
    3. How to Set the Record Fields: Use separate resources, and literal values
    4. Object: Task
    5. Set Field Values for the Case
    6. Row 1:
      1. Field: Description
      2. Value: {{!HTTPS_POST_Callout.defaultExc}
    7. Click Add Field
    8. Row 2:
      1. Field: OwnerId
      2. Value: {!$Record.OwnerId}
    9. Click Add Field
    10. Row 3:
      1. Field: Priority
      2. Value: High
    11. Click Add Field
    12. Row 4:
      1. Field: Status
      2. Value: Not Started
    13. Click Add Field
    14. Row 5:
      1. Field: Subject
      2. Value: {!HTTPS_POST_Callout.responseCode}
    15. Click Add Field
    16. Row 6:
      1. Field: WhatId
      2. Value: {!$Record.Id}
  4. Click Done.

In the end, Jestilla’s Flow will look like the following screenshot:

Once everything looks good, perform the steps below: 

  1. Click Save.
  2. Enter Flow Label the API Name will auto-populate.
  3. Click Show Advanced.
  4. API Version for Running the Flow: 58
  5. Interview Label: Verify Address {!$Flow.CurrentDateTime}
  6. Click Save.

Almost there! Once everything looks good, click the Activate button.  

Step 4: Create a Quick Action to Launch the Flow

The next step is to create a Quick Action on the Account object to launch the Screen Flow. Salesforce will automatically pass the Account Id to the recordId variable.

  1. Click Setup.
  2. In the Object Manager, type Account.
  3. Select Buttons, Links, and Action, then click New Action.
  4. Input the following information:
    1. Select Flow as Action Type.
    2. Select Verify Address as Flow.
    3. Enter Label (Verify Address) the Name will auto-populate.
  5. Click Save.
  6. Make sure to update the Account’s Lightning Record Pages to incorporate filter conditions for the custom action (Verify Address), ensuring that it is only visible when the Shipping Address field is filled out.

👉 Check out the video for step-by-step instructions.

Proof of Concept

  1. From now on, users can utilize the Verify Account button to confirm their shipping address and access additional information.
  2. In an error response, the flow will create a task and assign it to Account Owner.

Formative Assessment:

I want to hear from you!

What is one thing you learned from this post? How do you envision applying this new knowledge in the real world? Feel free to share in the comments below.

Have feedback, suggestions for posts, or need more information about Salesforce online training offered by me? Say hello, and leave a message!

6 thoughts on “Verify and Standardize Salesforce Addresses with Google’s Address Validation API

  1. Sorry for such a basic question, but what is the cost of using the Google address validation API? Thanks!

  2. The sequence of steps is a bit messed up in the article I believe, i.e. you are creating Apex-Defined variable of type ExternalService__GoogleAddressValidationAPI_Verifyx20Address_IN_body way before actually configuring POST action.

    In other words, ExternalService__GoogleAddressValidationAPI_Verifyx20Address_IN_body apex class will be generated by SF only after POST callout is configured.

    1. Thank you for bringing that to my attention. I’ve also noticed that the instructions were not in the correct order. I have now made the necessary updates to the blog post. I appreciate your help once again. 🙏

  3. Hi, thanks for writing this article, but I am running into a problem.

    At Step 3.6: Adding an Assignment Element to Construct the HTTP POST Request Body. Where does this variable come from: {!address.address.addressLines}

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.