Let’s get strategic. Free your procurement team’s days of manual work, so they can shift their focus on making a greater impact on your organization. With procurement software built just for the public sector, improve internal partnerships and the supplier experience.
Swap outdated manual processes and word processors for one automated tool built for the public sector.
A New Level of Compliance
From SOWs to contract management, make compliance easy for everyone on your team.
Remove Barriers to Bids
Thanks to intuitive, guided submissions and free access, see an increase in bid responses.
Strategic Sourcing Software
Build Solicitations in Record Time
From weeks to hours, shorten the time it takes to get RFPs out the door. Plus, make formatting issues, version control struggles, and emailing documents challenges of the past.
Build Solicitations in Record Time
From weeks to hours, shorten the time it takes to get RFPs out the door. Plus, make formatting issues, version control struggles, and emailing documents challenges of the past.
Provide free access, automatic notifications, and bilateral workflows to improve the experience for all of your suppliers. The result: happier suppliers, an increase in responses, and a more equitable experience.
An Experience Suppliers Actually Like
Provide free access, automatic notifications, and bilateral workflows to improve the experience for all of your suppliers. The result: happier suppliers, an increase in responses, and a more equitable experience.
Keep other stakeholders up-to-date with centralized evaluation committee management. During review, leverage automated bid tabulations and side-by-side scoring management (best value or lowest cost). Then broadcast results with one-click supplier awarding and audited email notifications.
Across-the-Board Evaluations
Keep other stakeholders up-to-date with centralized evaluation committee management. During review, leverage automated bid tabulations and side-by-side scoring management (best value or lowest cost). Then broadcast results with one-click supplier awarding and audited email notifications.
Clear your desk of file folders and stacks of binders for paperless, electronic contract management. Make the most of collaborative workflows for contract onboarding, renewals, and closeouts, and establish a single, centralized source of truth for your entire agency.
Contracts, Now Compliant and Centralized
Clear your desk of file folders and stacks of binders for paperless, electronic contract management. Make the most of collaborative workflows for contract onboarding, renewals, and closeouts, and establish a single, centralized source of truth for your entire agency.
Use AI advancements to speed up scope development and quickly find suppliers.
Bird's-eye View of Purchasing
From equity data to project statuses and more, get access to real-time reporting and share in a snap.
Rapid Requisitions
Coming soon, see requisition requests approved in a click with integrated procurement and financial systems.
Full Service Support
We’ve got your technical back. Experience live chat support from former government professionals.
Request a Demo of OpenGov Procurement
tag
* ppcUrlCookiePart1 and ppcUrlCookiePart2 must be called — see bottom of script
* Update ppcUrlCookiePart1 and ppcUrlCookiePart2 to match your querystring and form field names
*/
// Leave this as true to always use querystring values if they exist;
// if no querystring, will attempt to get cookie values
var ppcUseLatestValues = true;
// Function to get cookie value
function getCookie(param_name) {
var i, x, y, cookie = document.cookie.split(";");
for (i = 0; i < cookie.length; i++) {
x = cookie[i].substr(0, cookie[i].indexOf("="));
y = cookie[i].substr(cookie[i].indexOf("=") + 1);
x = x.replace(/^\s+|\s+$/g, "");
if (x == param_name) {
return unescape(y);
}
}
}
// Function to create cookie
function setCookie(param_name, value, exdays) {
var exdate = new Date();
exdate.setDate(exdate.getDate() + exdays);
var c_value = escape(value) + ((exdays == null) ? "" : "; domain=opengov.com; path=/; expires=" + exdate.toUTCString());
document.cookie = param_name + "=" + c_value;
}
// Function to check if cookie exists and, if not, grab value from URL and store it
function checkCookie(param_name, param_url_name) {
var param_value = getCookie(param_name);
if ((param_value != null && param_value !== "" && param_value !== "undefined") && ppcUseLatestValues === false) {
// cookie exists and we don't want to overwrite
} else {
var pageURL = window.location.search.substring(1);
var URLVariables = pageURL.split('&');
for (var i = 0; i < URLVariables.length; i++) {
var parameterName = URLVariables[i].split('=');
if (parameterName[0] == param_url_name) {
param_value = parameterName[1].split("#")[0];
}
}
if (param_value && param_value !== "undefined") {
setCookie(param_name, param_value, 365);
}
}
}
// Store UTM & gclid cookies from querystring
function ppcUrlCookiePart1() {
var param_names = [
'utm_source;utm_source',
'utm_medium;utm_medium',
'utm_campaign;utm_campaign',
'utm_adgroup;utm_adgroup',
'utm_term;utm_term',
'utm_content;utm_content',
'gclid;gclid' // ✅ Corrected: looks for ?gclid= in URL
];
for (var i = 0; i < param_names.length; i++) {
var param_object = param_names[i].split(";");
checkCookie(param_object[0], param_object[1]);
}
}
// Grab cookie value for form injection
function mGetCookie(param_name) {
return getCookie(param_name);
}
// Fallback for non-Marketo forms (uses getElementsByName)
function mCheckCookie(param_name, param_field_name) {
var param_value = mGetCookie(param_name);
if (param_value != null && param_value !== "" && param_value !== "undefined") {
try {
var obj1 = document.getElementsByName(param_field_name);
obj1[0].value = param_value;
return true;
} catch (err) {
return false;
}
}
return false;
}
// Fallback injection for non-Marketo forms
function ppcUrlCookiePart2() {
var param_names = [
'utm_source;utm_source',
'utm_medium;utm_medium',
'utm_campaign;utm_campaign',
'utm_adgroup;utm_adgroup',
'utm_term;utm_term',
'utm_content;utm_content',
'gclid;Google Click ID'
];
for (var i = 0; i < param_names.length; i++) {
var param_object = param_names[i].split(";");
mCheckCookie(param_object[0], param_object[1]);
}
}
// Helper to get gclid from either cookie or _gcl_aw
function getGclid() {
var direct = getCookie('gclid');
if (direct) return direct;
var gclAw = getCookie('_gcl_aw');
if (!gclAw) return null;
var parts = gclAw.split('.');
return parts.length >= 4 ? parts[3] : null;
}
// 🔒 Always attempt to set cookies if params exist (even if not passed through nav)
ppcUrlCookiePart1();
// ✅ When Marketo form is ready, inject values into correct field names
try {
MktoForms2.whenReady(function (form) {
// Delay slightly in case cookies are still being set
setTimeout(function () {
const formValues = {
'utm_source__c': mGetCookie('utm_source'),
'utm_medium__c': mGetCookie('utm_medium'),
'utm_campaign__c': mGetCookie('utm_campaign'),
'utm_term__c': mGetCookie('utm_term'),
'utm_content__c': mGetCookie('utm_content'),
'Google_Click_ID__c': getGclid()
};
console.log('[Injecting values into Marketo form]', formValues);
form.setValues(formValues);
}, 250); // Delay just in case async scripts slow cookie creation
});
} catch (err) {
// If error on Marketo form, try regular fallback
ppcUrlCookiePart2();
}