Smartsheet form + website data connection

Hello,
I'm exploring the possibility of connecting a Smartsheet form to our website's content management system. Specifically, I'm interested in implementing the following workflow:
- A user accesses a Smartsheet form to propose updates to specific website content (e.g., a location description).
- The user enters the new description and provides a comment explaining the change.
- This submission triggers an approval process within Smartsheet.
- Once approved, the updated content is automatically pushed to our website, replacing the existing content in the relevant field.
Is it possible to set up such a system? If so, could you please provide guidance on:
- How to link specific Smartsheet form fields to corresponding website content areas
- The process for implementing an approval workflow
- Methods for automating the content update on our website once approval is granted
Any information on potential solutions, required technical setup, or limitations would be greatly appreciated.
Thank you for your assistance.
Answers
-
Hi Tania,
Iโm going to lay out some ideas for how to make this work, but a lot of this is going to depend on how your website was developed, and how much flexibility you have to control your website. For example, if you built your website from scratch, then you can change anything that you want. If you use a website builder such as SquareSpace, then this might be more challenging.
# Setting up the sheet
Column โApprovedโ - A checkbox column. If the change has been approved, then the checkbox will be checked.
Column โDescriptionโ - A text column. Contains a description of the change.
Column โContent-IDโ - A text column. Contains an ID that is used to identify which part of the website the change is for.
Column โModified Dateโ - A system column that tracks when each row was last modified.
Some example โContent-IDโs could be something like โhome-page-titleโ, โhome-page-descriptionโ, โpricing-page-price-1-textโ, โpricing-page-price-2-textโ. Each of these Content-IDs must be unique across your entire website. Also, it might be a burden for your users to know exactly which Content-ID corresponds to which piece of your website. So you might make it so that the approver, who is responsible for approving the change, must manually enter the correct Content ID that corresponds to the change.
# Updating the website to use the content
If I was doing this for my website, I would probably create a giant JSON in its own file that will contain all of the content. The JSON will contain the Content-IDs and the actual content. For example:
{
โhome-page-titleโ: โThis is the titleโ
โhome-page-descriptionโ: "This is the descriptionโ
}
Then my JavaScript would read the JSON and update all of the HTML based on the content in this file.
```
import {contentJSON} from โ../content-json.jsonโ;
const homePageTitle = document.querySelector(โ#homePageTitleโ);
homePageTitle.textContent = contentJson[โhome-page-titleโ];
```
# Pushing changes from the sheet to the JSON
I would create a program that scans the sheet every 30 minutes or so. The program would look for approved rows that have been modified since the last time that the program scanned the sheet. Then the program would update the JSON using the Content-IDs from the rows in the sheet.
If your team built your website from scratch programmatically, then youโre probably using a version control system like Git. In this case, the program will need to modify the JSON file push the change to your Git repo (e.g. GitHub).
# Alternatively - If you are using a website builder such as SquareSpace or you donโt want to check the JSON file into Git
An alternative approach is to host the JSON file, just like you would host images or other assets. Then the program wouldnโt need to check any code into any version control system, it would just need to override the existing file. If you are using a CDN, the API will most likely be S3, in which case you can use the S3 CLI or S3-Sync-Client to make this change. And it would be fairly straightforward.
If you do this approach, then you would need to modify the code from above to look something like this:
```
const contentJson = await fetch(URL_TO_WHEREVER_YOU_HOST_THE_FILE);
const homePageTitle = document.querySelector(โ#homePageTitleโ);
homePageTitle.textContent = contentJson[โhome-page-titleโ];
```
# Final Thoughts
Overall, this would be a tricky project but it is possible. It would require a lot of effort to get it going, and then it would require ongoing maintenance to keep it working.
I really loved this question though, and Iโm happy to explore more ideas and Iโm happy to further elaborate on anything that I mentioned above. Please let me know if you have any other questions.
SSFeatures
Nathan Braun (Founder of SSFeatures) (nathan@ssfeatures.com) (LinkedIn)
SSFeatures makes Smartsheet way easier to use and it saves you hours of work every week. It adds essential features into Smartsheet to save you time. For example: โ Auto Sorting โ Sorting with Filters โ Report PDF Generation โ Copy and Paste Conditional Formats โ Copy and Paste Automation Workflows โ Column Manager โ and so many more.
-
Hi Tania,
Iโm going to lay out some ideas for how to make this work, but a lot of this is going to depend on how your website was developed, and how much flexibility you have to control your website. For example, if you built your website from scratch, then you can change anything that you want. If you use a website builder, then this might be more challenging.
Setting up the sheet
- Column โApprovedโ - A checkbox column. If the change has been approved, then the checkbox will be checked.
- Column โDescriptionโ - A text column. Contains a description of the change.
- Column โContentIDโ - A text column. Contains an ID that is used to identify which part of the website the change is for.
- Column โModified Dateโ - A system column that tracks when each row was last modified.
The ContentID column is the most important, it will be used to identify which content on the website the change is for. ContentIDs could be something like:
- โhome-page-titleโ, โhome-page-descriptionโ, โpricing-page-price-1-textโ, โpricing-page-price-2-textโ.ย
Each of these ContentIDs must be unique across your entire website. Also, it might be a burden for your users to know exactly which ContentID corresponds to which piece of your website. So you might make it so that the approver who is responsible for approving the change, must manually enter the correct ContentID that corresponds to the change.
Updating the website to use the content
If I was doing this for my website, I would probably create a giant JSON object in its own file that will contain all of the content. The JSON will contain the ContentIDs and the actual content. For example:
{ โhome-page-titleโ: โThis is the titleโ โhome-page-descriptionโ: "This is the descriptionโ }
Then my websiteย would read the JSON and update all of the HTML based on the content in this file.
I would probably host the content JSON in the same place that I host my images and other assets. Then my website would fetch the JSON and update the HTML accordingly, for example:
const contentJson = await fetch(URL_TO_WHEREVER_YOU_HOST_THE_FILE); const homePageTitle = document.querySelector(โ#homePageTitleโ); homePageTitle.textContent = contentJson[โhome-page-titleโ];
Pushing changes from the sheet to the JSON
I would create a program that scans the sheet every 30 minutes or so. The program would look for approved rows that have been modified since the last time that the program scanned the sheet. Then the program would update the JSON using the ContentIDs from the rows in the sheet.
The program would load the existing JSON file, modify the JSON object, and then re-save the JSON file back to the place where I host the JSON file. In my case, I host my assets using a CDN that uses AWSโ S3 API. So I could use the S3 CLI or the S3-Sync-Client to override the JSON file with the new changes.
Alternatively, you might be able to use SmartSheet's Bridge to push the changes, depending on how you host the file.
Final Thoughts
Overall, this would be a tricky project but it is possible. It would require a lot of effort to get it going, and then it would require ongoing maintenance to keep it working.
If you want to make your entire websiteโs content editable, then the maintenance is going to be high since there will be a lot of ContentIDs. It would be difficult to keep track of which ContentID corresponds to which part of the page. However, if there are only a handful of pieces of content on your website that you want to be editable, the number of ContentIDs will be smaller and more maintainable.
I really loved this question though, and Iโm happy to explore more ideas and Iโm happy to further elaborate on anything that I mentioned above. Please let me know if you have any other questions.
SSFeatures
Nathan Braun (Founder of SSFeatures) (nathan@ssfeatures.com) (LinkedIn)
SSFeatures makes Smartsheet way easier to use and it saves you hours of work every week. It adds essential features into Smartsheet to save you time. For example: โ Auto Sorting โ Sorting with Filters โ Report PDF Generation โ Copy and Paste Conditional Formats โ Copy and Paste Automation Workflows โ Column Manager โ and so many more.
-
Hi,
I hope you're well and safe!
Which CMS are you using?
Be safe, and have a fantastic day!
Best,
Andrรฉe Starรฅ | Workflow Consultant / CEO @ WORK BOLD
โ Did my comment(s) help/answer your question or solve your problem? Please support the Community and me byย marking it - Insightful ๐ก- Vote Up โฌ๏ธ - Aweseome โค๏ธ - or/and as the accepted answer. It will make it easier for others to find a solution or help to answer! I appreciate it, thanks!SMARTSHEET EXPERT CONSULTANT & PARTNER
Andrรฉe Starรฅ | Workflow Consultant / CEO @ WORK BOLD
W: www.workbold.com | E: andree@workbold.com | P: +46 (0) - 72 - 510 99 35
Feel free to contact me for help with Smartsheet, integrations, general workflow advice, or anything else.