Build your own internal app for sharing content, tracking adoption, and managing internal requests.
Content Operating System - Complete Setup Guide
This guide will walk you through setting up your own searchable content database with analytics tracking. The system helps teams find content quickly and provides insights into what's being used most.
📋 Table of Contents
🚀 Initial Setup
Step 1: Copy the Template Spreadsheet
- Open the template spreadsheet: Content Database Template (link provided separately)
- Click "Make a copy"
- Save it to your Google Drive with a descriptive name like "Company Content Database"
- Open your new copy
Step 2: Set Up Google Apps Script
- In your copied spreadsheet, click Extensions > Apps Script
- Delete any existing code in the editor
- Copy and paste the provided
Code.gs
file content - Click Save (disk icon)
- Give your project a name like "Content Finder App"
Step 3: Get Your Spreadsheet ID
You'll need this to connect your app to your data:
- In your spreadsheet, look at the URL in your browser:
<https://docs.google.com/spreadsheets/d/YOUR_SPREADSHEET_ID/edit>
- Copy the
YOUR_SPREADSHEET_ID
portion (the long string between/d/
and/edit
)
Example:
- URL:
https://docs.google.com/spreadsheets/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/edit
- Spreadsheet ID:
1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms
🔐 Script Authorization
When you first run any function in the Apps Script, you'll see a security warning. This is normal and expected.
Why You See This Warning
Google shows this warning for ANY custom script to protect users from potentially harmful code. The warning appears because:
- The script isn't published on the Google Workspace Marketplace
- Google hasn't verified the script's developer
- The script requires access to your Google Drive and Spreadsheets
Why It's Safe to Proceed
This script is completely safe because:
- ✅ It's YOUR copy of the script running in YOUR Google account
- ✅ It only accesses YOUR Google Drive files
- ✅ No data is sent to external services
- ✅ All operations happen within your Google Workspace
How to Authorize the Script
- When you see "Google hasn't verified this app", click "Advanced" (bottom left)
- Click "Go to Content Finder App (unsafe)"
- Review the permissions and click "Allow"
These permissions are necessary for the script to:
- Read your content database spreadsheet
- Create tracking sheets for analytics and feedback
- Create a web app to display your content finder
⚙️ Configuration
After authorization, you need to update the script with your specific spreadsheet ID:
Step 1: Update the Script Configuration
- In your Apps Script editor, find the configuration section at the top:
// ============================================================================
// REQUIRED CONFIGURATION - REPLACE WITH YOUR ID
// ============================================================================
const SPREADSHEET_ID = 'YOUR_SPREADSHEET_ID_HERE'; // ⚠️ CHANGE THIS!
- Replace
'YOUR_SPREADSHEET_ID_HERE'
with your actual Spreadsheet ID from the Initial Setup - Click Save (disk icon)
Example:
const SPREADSHEET_ID = '1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms';
Step 2: Customize Appearance (Optional)
You can customize the web app's appearance by modifying the branding section:
// ============================================================================
// BRANDING CUSTOMIZATION - CHANGE THESE TO MATCH YOUR BRAND
// ============================================================================
const BRANDING = {
// App Title and Description
appTitle: 'Content Finder', // Change this!
appDescription: 'Find the perfect content for your needs',
// Colors (use hex codes)
primaryColor: '#FF5C35', // Main brand color (buttons, links)
secondaryColor: '#6B46E3', // Secondary color (filters, accents)
darkColor: '#1B1B1B', // Text color
lightGrayColor: '#F5F5F5', // Background accents
// Footer Customization
footerText: 'Created by Your Company Name', // Change this!
footerLink: '<https://yourwebsite.com>', // Change this!
footerYear: '2025',
// Content Labels
contentLabel: 'collateral',
searchPlaceholder: 'Search content...',
};
📊 Adding Your Content
Required Sheet Structure
Your spreadsheet needs a sheet named "Content Database" with these exact column headers:
Column | Description | Example |
Collateral Name | The title/name of your content | "Product Demo Video" |
Link/Location | URL or file path | |
Type | Content type | "Video", "PDF", "Webpage" |
Product Line | Which product this relates to | "Enterprise", "Starter" |
Integrations | Related integrations | "Salesforce", "HubSpot" |
Competitor | Competitive context | "Competitor A", "General" |
Persona | Target audience | "IT Manager", "CEO" |
Company Size | Target company size | "Enterprise", "SMB" |
Industry | Target industry | "Healthcare", "Finance" |
Sample Data Format
Here's how to structure your content data:
| Collateral Name | Link/Location | Type | Product Line | Integrations | Competitor | Persona | Company Size | Industry |-----|-----|----- | Product Demo Video | https://youtu.be/abc123 | Video | Enterprise | Salesforce, HubSpot | General | Sales Manager | Enterprise | Technology | ROI Calculator | https://company.com/roi-calc | Tool | Professional | Excel | vs Competitor A | CFO | SMB | Finance
Data Entry Best Practices
Consistent Naming:
- Use the same terms across entries (e.g., always "Enterprise" not sometimes "enterprise")
- Create a style guide for your team
Multiple Values:
- Separate multiple values with commas: "Salesforce, HubSpot, Slack"
- Use spaces after commas for readability
Links:
- Include full URLs starting with
https://
- Test links to make sure they work
🚀 Deploying the Web App
To make your content finder accessible via a web app:
- In your Apps Script editor, click Deploy > New deployment
- Select Web app as the deployment type
- Configure the deployment:
- Description: "Content Finder Web App"
- Execute as: "Me"
- Who has access: Choose appropriate access level:
- "Only myself" (just for you)
- "Anyone within [your organization]" (for internal use)
- "Anyone" (public access)
- Click Deploy
- Copy the Web app URL that appears
You now have a web app that displays your searchable content database!
Testing Your Deployment
- Open the web app URL in a new browser tab
- You should see:
- Your content finder interface
- Search and filter options
- Your content data (if you've added any)
🎨 Customization Options
Content Database Structure
Modify your spreadsheet columns to match your content types. If you add custom columns, update the code in the getInitialData()
function.
Web App Appearance
Customize colors, fonts, and text by modifying the variables in the "BRANDING CUSTOMIZATION" section:
- App Title: Change the main heading
- Colors: Use your brand colors (hex codes)
- Footer: Add your company information
- Content Labels: Customize terminology
Analytics Features
The system automatically tracks:
- Content clicks and usage
- Popular content items
- Usage trends over time
- User feedback
Access analytics by clicking the "📊 Analytics" link in your web app.
📈 Using the System
For End Users
Finding Content:
- Use the search box to find content by name or keywords
- Use filter dropdowns to narrow by category
- Click content titles to open in new tabs
- Use "Copy Link" buttons to share content URLs
Providing Feedback:
- Click the "Provide Feedback" button (bottom right)
- Select feedback type and enter your message
- Submit to help improve the content database
For Administrators
Managing Content:
- Add new content directly to the spreadsheet
- Update existing content by editing spreadsheet rows
- Remove outdated content by deleting rows
Monitoring Usage:
- Click "📊 Analytics" to view usage dashboard
- Review feedback in the "Feedback" sheet
- Track popular content in the "Click Tracking" sheet
🔧 Troubleshooting
Content Not Showing
Check these items:
- Verify your sheet is named exactly "Content Database"
- Ensure column headers match exactly (case-sensitive)
- Make sure you have data in rows 2 and below
- Check that your Spreadsheet ID is correct in the code
Authorization Issues
If you see "You do not have permission to access the requested resource":
- Make sure you're signed in with the same Google account that owns the script
- Try reauthorizing the script by running any function
- Check spreadsheet sharing permissions
Web App Not Loading
- Create a new deployment of the web app
- Check browser console for JavaScript errors (F12)
- Verify the web app URL is correct
- Try accessing in an incognito/private browser window
Performance Issues
- Keep content database under 1000 items for best performance
- Data is cached for 5 minutes - wait for cache refresh
- Check internet connection speed
❓ FAQ
Is this script safe to use?
Yes! The script only accesses your own Google Drive files and doesn't send data anywhere else. The security warning is standard for any custom script that hasn't been verified by Google.
Can I share this with my team?
Yes! You can:
- Share the web app URL with anyone who needs to find content
- Share the spreadsheet with editors who need to manage content
- Share this documentation to help others understand the system
How do I add new content categories?
- Add new columns to your spreadsheet
- Update the
columns
array in thegetInitialData()
function - Redeploy the web app
Can I customize the search and filter options?
Yes! Modify the spreadsheet structure and update the corresponding code sections. The system automatically generates filter options based on your data.
How do I backup my data?
- Regularly download your spreadsheet as Excel/CSV
- Use Google Takeout for complete backup
- Consider setting up automated backups using Apps Script triggers
How do I stop click tracking?
Remove or comment out the trackClick()
function calls in the JavaScript code, then redeploy the web app.
📞 Need Help?
If you encounter any issues or have questions about the Content Operating System, check the troubleshooting section above or review the error messages in your browser's developer console (F12).
For everything else, you can email support@productivepmm.com